Текст
                    СЕРИЯ
ПРОГРАММИРУЕМЫЕ СИСТЕМЫ
П. П. Редькин
Микроконтроллеры ARM7
семейства LPC2000
Руководство
пользователя
ОДЭКА
Москва
Издательский дом «Додэка-ХХ1»
2007

УДК 004.31 ББК 32.973-04 РЗЗ Редькин П. П. РЗЗ Микроконтроллеры ARM7 семейства LPC2000. Руководство пользо- вателя (+CD). — М.: Издательский дом «Додэка-ХХ1», 2007. — 560 с.: илл. (Серия «Программируемые системы»). ISBN 978-5-94120-111-2 Данная книга представляет собой не только подробное справочное пособие по микро- контроллерам семейства LPC2000, но и практическое руководство по их программированию и использованию для решения широкого круга задач по проектированию электронной аппаратуры. В ней содержится полное описание микроконтроллеров семейства LPC2000, в том числе архитектуры ядра ARM7TDMI-S, системы команд, регистровой структуры и аппаратного построения основных и периферийных модулей LPC2000, а также рекомендации производителей по программированию и применению. Книга содержит подробные описания программной среды разработки-отладки приложений IDE IAR Embedded Workbench и программы-загрузчика Flash-памяти LPC2000 Flash Utility с примерами, поясняющими возможности их практического применения. Также приведены примеры алгоритмов и исходных текстов управляющих программ на языке С, демонстрирующих пользователю «в железе» работу ядра и периферийных узлов микроконтроллера. Все представленные программы написаны или протестированы лично автором книги, снабжены описаниями и комментариями, содержат драйверы периферийных устройств и могут использоваться в пользовательских приложениях на базе микроконтроллеров семейства LPC2000. Предназначена для специалистов в области разработки электронной аппаратуры, радиолюбителей и студентов технических вузов. УДК 004.31 ББК 32.973-04 Главный редактор В. М. Халикеев Ответственный редактор И. А. Корабельникова Научный редактор С. В. Турецкий Технический редактор В. И. Матвеева График Л. Н. Клочков Верстальщик И. С. Кайнова Подписано в печать 16.02.2007. Формат 70x100/16. Бумага типографская № 2. Гарнитура «NewionC». Печать офсетная. Объем 35,0 п. л. Усл. печ. л. 45,4. Тираж 2000 экз. Код LPC2. Заказ № 304. Издательский дом «Додэка-ХХ1» ОКП 95 3000 105318 Москва, а/я 70. Тел./факс: (495) 366-24-29, 366-09-22 E-mail: books@dodeca.ru; red@dodeca.ru Отпечатано с готовых диапозитивов в ОАО «Щербинская типография». 117623 Москва, ул. Типографская, д. 10 ISBN 978-5-94120-111-2 © Издательский дом «Додэка-ХХЬ, 2007 ® Серия «Программируемые системы»
ОГЛАВЛЕНИЕ Предисловие автора................................................................9 Часть 1. Справочная информация по семейству LPC2000...............................13 Глава 1. Общее описание микроконтроллеров LPC2000.................................14 1.1. Характерные особенности микроконтроллеров семейства LPC2000............. 14 1.2. Приложения............................................................. 15 1.3. Особенности архитектуры..................................................18 1.4. Процессорное ядро ARM7TDMI-S ... /.......................................18 1.4.1. Режимы работы и регистровые модели процессора в состоянии ARM......21 1.4.2. Способы адресации и система команд ARM.............................24 1.4.3. Регистровые модели процессора в состоянии THUMB....................34 1.4.4. Система команд THUMB...............................................35 1.4.5. Обработка исключительных ситуаций..................................39 1.4.6. Время реакции на прерывания........................................43 1.5. Flash-память на кристалле................................................44 1.6. Статическое ОЗУ на кристалле.............................................44 1.7. Специальные регистры микроконтроллера....................................44 1.8. Блок-схемы микроконтроллеров LPC2000.................................... 45 Глава 2. Организация системной памяти.............................................54 2.1. Массив системной памяти..................................................54 2.2. Карта памяти и операционные режимы...................................... 59 2.3. Переотображение памяти...................................................61 2.4. Аварийное прекращение работы выборки данных..............................62 Глава 3. Контроллер внешней памяти (ЕМС)..........................................64 3.1. Функциональные характеристики............................................64 3.2. Описание................................................................-64 3.3. Регистры ЕМС.............................................................65 3.4. Интерфейс внешней памяти.................................................67 3.5. Типичные шинные последовательности сигналов..............................69 3.6. Выбор внешней памяти.....................................................70 Глава 4. Блок управления системой.................................................71 4.1. Основные функции.........................................................71 4.2. Линии интерфейса управления..............................................71 4.3. Регистры интерфейса управления...........................................72 4.4. Стабилизированный кварцевый генератор....................................73 4.4.1. Алгоритм выбора тактовой частоты...................................74 4.5. Входы внешних прерываний.................................................74 4.5.1. Описание регистров................................................«75 4.5.2. Множества выводов внешних прерываний...............................79 4.6. Управление памятью.......................................................80 4.6.1. Рекомендации по использованию возможности управления памятью.......81 4.7. Встроенная система ФАПЧ..................................................82 4.7.1. Описание регистров ФАПЧ............................................83 4.7.2. Прерывание от ФАПЧ.................................................85 4.7.3. Режимы ФАПЧ........................................................86 4.7.4. Система ФАПЧ и режим Power Down....................................86 4.7.5. Вычисление частоты ФАПЧ............................................87 4.7.6. Процедура настройки параметров системы ФАПЧ........................87 4.8. Управление потребляемой мощностью........................................88 4.8.1. Описание регистров.................................................89 4.8.2. Рекомендации по использованию управления потребляемой мощностью....93 4.9. Системный сброс..........................................................93 4.10. Делитель VPB............................................................94 4.11. Таймер «пробуждения»....................................................96
4 Оглавление Глава 5. Модуль акселератора памяти (МАМ)..........................................98 5.1. Описание..................................................................98 5.2. Состав модуля акселератора памяти.........................................99 5.3. Банки Flash-памяти.......................................................100 5.4. Защелки команд и защелки данных..........................................100 5.5. Проблемы программирования Flash-памяти...................................100 5.6. Режимы работы модуля акселератора памяти.................................101 5.7. Конфигурация модуля акселератора памяти..................................102 5.8. Описание регистров модуля акселератора памяти............................102 5.9. Рекомендации по использованию модуля акселератора памяти.................104 Глава 6. Контроллер векторов прерываний (VIC).....................................105 6.1. Описание VIC.............................................................105 6.2. Регистры VIC.............................................................106 6.3. Источники прерываний.....................................................113 6.4. Ложные прерывания........................................................114 6.5. Детальные исследования ложных прерываний.................................115 6.6. Рекомендации по использованию VIC........................................117 Глава 7. Цоколевка и назначение выводов...........................................120 Глава 8. Блок коммутации выводов..................................................178 8.1. Назначение............................................................. 178 8.2. Описание регистров.......................................................178 8.3. Значения регистров выбора функций выводов................................194 8.4. Управление загрузкой в микроконтроллерах с контроллером внешней памяти...194 Глава 9. Линии ввода/вывода общего назначения (GPIO)..............................195 9.1. Описание регистров GРЮ....................................................196 9.2. Рекомендации по использованию GPIO........................................199 Глава 10. Универсальный асинхронный приемопередатчик UART0........................200 10.1. Описание регистров UART0.................................................200 10.2. Архитектура UART0........................................................208 Глава И. Универсальный асинхронный приемопередатчик UART1.........................210 11.1. Описание регистров UART1.................................................211 11.2. Архитектура LJART1.......................................................223 Глава 12. Интерфейс 12С...........................................................225 12.1. Типовые особенности LPC2000........................................... 225 12.2. Общее описание...........................................................225 12.3. Операционные режимы 12С..................................................226 12.3.1. Режим ведущего передатчика.........................................226 12.3.2. Режим ведущего приемника...........................................229 12.3.3. Режим ведомого приемника...........................................232 12.3.4. Режим ведомого передатчика.........................................236 12.4. Описание выводов.........................................................239 12.5. Описание регистров.......................................................239 Глава 13. Интерфейс SPI...........................................................247 13.1. Архитектура блока SPI....................................................247 13.2. Описание интерфейса SPI..................................................248 13.2.1. Краткий обзор SPI..................................................248 13.2.2. Передача данных через SPI..........................................248 13.3. Детализация периферии SPI................................................250 13.3.1. Общая информация...................................................250 13.3.2. Операции ведущего..................................................250 13.3.3. Операции ведомого..................................................251 13.3.4. Условия возникновения исключительных ситуаций SPI..................252 13.4. Описание выводов SPI.....................................................253 13.5. Описание регистров SPI...................................................254 Глава 14. Контроллеры CAN и приемные фильтры......................................258 14.1. Отличительные особенности контроллеров CAN семейства LPC2000............ 258 14.2. Описание выводов CAN.....................................................259 14.3. Карта памяти блока CAN...................................................259
Оглавление 5 14.4. Регистры контроллера CAN................................................259 14.5. Операции контроллера CAN................................................274 14.5.1. Обработка ошибок..................................................274 14.5.2. «Спящий» режим....................................................275 14.5.3. Прерывания........................................................275 14.5.4. Приоритет передачи................................................276 14.6. Центральные регистры CAN................................................276 14.7. Глобальный приемный фильтр..............................................278 14.7.1. Регистры приемного фильтра........................................281 14.7.2. Примеры таблиц приемного фильтра и значений идентификаторов.......284 14.8. Режим «fullCAN».........................................................285 Глава 15. Таймеры TIMER0 и TIMER1.................................................287 15.1. Общее описание..........................................................287 15.2. Архитектура таймера.....................................................288 15.3. Описание выводов........................................................289 15.4. Описание регистров таймеров.............................................289 15.5. Пример операций таймера.................................................296 Глава 16. Широтно-импульсный модулятор (PWM)......................................298 16.1. Основные функциональные характеристики..................................298 16.2. Структура и общее описание модуля PWM...................................299 16.2.1. Правила изменения выходного сигнала в канале PWM с управлением одиночным перепадом............................302 16.2.2. Правила изменения выходного сигнала в канале PWM с управлением двойным перепадом..............................302 16.3. Описание выводов PWM....................................................303 16.4. Описание регистров PWM..................................................303 Глава 17. Аналого-цифровой преобразователь (ADC)..................................312 17.1. Описание выводов ADC....................................................312 17.2. Описание регистров ADC..................................................314 17.3. Операции модуля ADC.....................................................317 17.3.1. Преобразование, вызываемое аппаратно..............................317 17.3.2. Генерация тактового сигнала.......................................318 17.3.3. Прерывания........................................................318 17.3.4. Влияние на точность АЦП цифровых цепей............................318 Глава 18. Модуль часов-календаря реального времени (RTC)..........................319 18.1. Архитектура модуля RTC..................................................319 18.2. Описание регистров RTC..................................................320 18.2.1. Прерывания от модуля RTC..........................................321 18.2.2. Смешанная группа регистров........................................322 18.2.3. Прерывание от инкрементирования счетчиков.........................323 18.2.4. Сигнальная маска..................................................324 18.2.5. Регистры консолидированного времени...............................325 18.2.6. Группа счетчиков времени..........................................326 18.2.7. Определение високосного года......................................327 18.2.8. Группа сигнальных регистров.......................................327 18.3. Рекомендации по использованию модуля RTC................................328 18.4. Делитель опорной частоты (предделитель) RTC.............................328 18.4.1. Примеры использования предделителя................................330 18.4.2. Операции предделителя RTC.........................................331 Глава 19. Сторожевой таймер (WDT).................................................332 19.1. Описание WDT............................................................332 19.2. Описание регистров WDT..................................................334 19.3. Рекомендации по использованию сброса от WDT и внешнего запуска..........336 Глава 20. Организация и программирование Flash-памяти.............................337 20.1. Система Flash-памяти LPC2000 ........................................ - 337 20.2. Загрузчик Flash-памяти..................................................337 20.3. Карта памяти после сброса...............................................338 20.4. Критерий действительного пользовательского программного кода............339
6 Оглавление 20.5. Коммуникационные протоколы.............................................340 20.6. Блок-схема процесса загрузки...........................................342 20.7. Номера секторов Flash-памяти...........................................343 20.8. Защита кода от чтения..................................................347 20.9. Команды ISP............................................................348 20.10. Команды IAP...........................................................355 20.11. Интерфейс JTAG программирования Flash-памяти..........................361 Глава 21. Модуль ЦАП (DAC)......................................................362 21.1. Описание выводов ЦАП...................................................362 21.2. Описание регистров ЦАП.................................................362 21.3. Операции ЦАП...........................................................363 Глава 22. Встроенные логические схемы отладки (ICE).............................364 22.1. Описание ICE...........................................................365 22.2. Описание выводов ICE................................................ 366 22.2.1. Состояние мультиплексированных выводов JTAG при сбросе...........366 22.3. Описание регистров ICE.................................................366 Глава 23. Встроенная макроячейка трассировки (ЕТМ)..............................368 23.1. Описание ЕТМ...........................................................368 23.2. Конфигурация ЕТМ.......................................................369 23.3. Описание выводов ЕТМ...................................................370 23.3.1. Мультиплексированные выводы ЕТМ в состоянии сброса...............370 23.4. Описание регистров ЕТМ.................................................370 Глава 24. Отладчик RealMonitor..................................................372 24.1. Описание RealMonitor...................................................372 24.2. Компоненты RealMonitor.................................................373 24.3. Порядок работы Real Monitor............................................374 24.3.1. Разрешение работы RealMonitor....................................375 24.4. Обработка исключительных ситуаций......................................376 24.4.1. Обработка исключительных ситуаций RealMonitor....................376 24.4.2. Инициализация RMTarget...........................................377 24.5. Пример кода с использованием RealMonitor...............................377 24.6. Опции компоновки RealMonitor...........................................379 Список рекомендуемой литературы к Части 1.......................................381 Часть 2. Разработка и отладка приложений на базе LPC2000.................................................................382 Глава 25. Интегрированная среда IDE IAR Embedded Workbench™.....................383 25.1. Структура IDE..........................................................384 25.1.1. Структура директорий IDE.........................................384 25.1.2. Микроконтроллеры, поддерживаемые IDE.............................386 25.1.3. Типы файлов IDE..................................................386 25.2. Создание проектов приложений в IDE.....................................388 25.2.1. Параметры настройки нового проекта...............................388 25.2.2. Создание окна рабочей области....................................389 25.2.3. Создание нового проекта..........................................390 25.2.4. Добавление файлов к проекту.................................... 392 25.2.5. Задание опций проекта............................................393 25.3. Компилирование и компоновка приложения.................................395 25.3.1. Компилирование исходных файлов...................................395 25.3.2. Анализ файла листинга............................................396 25.3.3. Компоновка приложения............................................398 25.3.4. Анализ файла карты компоновщика..................................400 25.4. Отладка приложения в режиме симуляции..................................400 25.4.1. Старт отладчика..................................................401 25.4.2. Организация окон.................................................402 25.4.3. Просмотр команд исходного текста.................................402 25.4.4. Отслеживание переменных..........................................404 25.4.5. Установка и мониторинг точек останова............................405
Оглавление 7 25.4.6. Отладка в режиме дизассемблирования...............................406 25.4.7. Мониторинг регистров............................................ 407 25.4.8. Мониторинг памяти......,..........................................408 25.4.9. Просмотр окна терминала ввода/вывода..............................409 25.4.10. Завершение выполнения приложения.................................410 Глава 26. Совместное использование в приложении модулей на С и на ассемблере.....411 26.1. Соглашение о вызовах....................................................411 26.2. Добавление ассемблерного модуля к проекту...............................412 26.2.1. Модификации заданных установок проекта............................412 26.2.2. Исследование ассемблерного файла листинга.........................414 26.2.3. Завершение компоновки проекта.....................................414 Глава 27. Симуляция прерываний...................................................415 27.1. Добавление программы обработки прерывания...............................415 27.1.1. Текст программы обработки прерывания..............................415 27.2. Задание параметров проекта..............................................416 27.2.1. Установка среды симуляции.........................................416 27.2.2. Определение макрофайла установок C-SPY............................417 27.2.3. Определение опций C-SPY........................................ 417 27.2.4. Формирование проекта..............................................418 27.2.5. Старт симулятора..................................................419 27.2.6. Определение симулируемого прерывания..............................419 27.2.7. Задание точки останова немедленного чтения........................420 27.3. Выполнение приложения...................................................421 27.4. Использование макроопределений для прерываний и точек останова..........421 Глава 28. Работа с модулями библиотек............................................423 28.1. Использование библиотек.................................................423 28.2. Создание нового проекта.................................................424 28.3. Создание библиотечного проекта..........................................424 28.4. Использование библиотеки в прикладном проекте...........................425 Глава 29. Универсальный компоновщик IAR XLINK Linker™............................426 29.1. Объектный формат........................................................427 29.2. Функции IAR XLINK.......................................................427 29.3. Выходной формат....................................................... 427 29.4. Входные файлы и модули..................................................427 29.4.1. Библиотеки........................................................428 29.4.2. Создание библиотек................................................428 29.5. Сегменты................................................................429 29.5.1. Управление сегментами.............................................429 29.5.2. Переадресация.....................................................430 29.5.3. Типы распределения сегментов......................................430 29.5.4. Типы сегментов памяти.............................................431 29.5.5. Ошибки перекрытия.................................................432 29.5.6. Ошибки диапазона..................................................432 29.5.7. Примеры размещения сегментов......................................432 29.6. Настройки XLINK в IDE IAR Embedded Workbench............................433 29.6.1. Опции XLINK........................................................433 29.7. Примеры командных файлов компоновщика....................................435 Глава 30. Отладка приложений в целевой системе...................................441 30.1. Аппаратные средства отладчика C-SPY......................................442 30.2. Отладка с помощью аппаратных средств С-SPY...............................447 30.2.1. Старт отладчика....................................................447 30.2.2. Задание контрольных точек в целевой системе........................449 Глава 31. Запись пользовательских программ во Flash-память микроконтроллеров.....451 31.1. Загрузка Flash-памяти с помощью LPC2000 Flash Utility...................451 31.2. Загрузка Flash-памяти микроконтроллеров LPC2000 с помощью C-SPY.........455 31.2.1. Задание загрузчика Flash-памяти...................................456 31.2.2. Механизм загрузки во Flash-память.................................458 31.2.3. Требования к компоновке...........................................458
8 Оглавление 31.2.4. Порядок действий при загрузке во Flash-память.....................460 Глава 32. Общее описание настроек проектов в IAR EWARM...........................461 Глава 33. Пользовательские проекты на базе микроконтроллеров LPC2000.............464 33.1. Платформа для создания приложений.......................................464 33.2. Интерфейс ввода/вывода в целевой пользовательской системе...............472 33.2.1. Интерфейс кнопок управления.......................................472 33.2.2. Интерфейс ЖКИ.....................................................477 33.3. Первый пользовательский проект..........................................481 33.4. Интерфейс обслуживания RTC..............................................482 33.5. Интерфейс обслуживания АЦП..............................................491 33.6. Интерфейс обслуживания ШИМ (PWM)........................................494 33.7. Интерфейс обслуживания UART.............................................499 33.8. Интерфейс обмена с внешней памятью через 12С............................506 33.9. Интерфейс обмена с внешним устройством через SPI........................516 33.10. Обслуживание внутрисхемного программирования IAP.......................526 Список рекомендуемой литературы к Части 2........................................529 Краткий словарь терминов.........................................................531 Приложение 1. Предельно допустимые параметры микроконтроллеров LPC2000.......... 534 Приложение 2. Статические характеристики микроконтроллеров LPC2000 ............. 536 Приложение 3. Статические характеристики АЦП микроконтроллеров LPC2000 ......... 552 Приложение 4. Динамические характеристики микроконтроллеров LPC2000 ............ 554 Приложение 5. Принципиальная схема одного из возможных исполнений интерфейса Wiggler...............................556 Приложение 6. Таблица фонтов (шрифтов) для русифицированного ЖКИ со встроенным контроллером управления, совместимым с HD44780 ................................ 557 Материалы, размещенные на компакт-диске..........................................558
Предисловие автора В настоящее время особой популярностью у разработчиков электронных ус- тройств пользуются так называемые встраиваемые микроконтроллеры. В мире выпускается большое количество семейств микроконтроллеров, в основном на базе приборов с 8-битной1) шиной данных и процессорными RISC- и CISC-яд- рами. Их производительность и объем памяти вполне достаточны для решения множества бытовых и промышленных задач, а архитектура ядер многих из этих семейств хорошо изучена пользователями. Для 8-битных микроконтроллеров написано огромное количество программ, которые, наряду с многочисленны- ми русифицированными описаниями самих этих устройств, свободно доступны в сети Интернет. 16- и 32-битные микроконтроллеры, которые обеспечивают более высокую производительность, пока распространены не столь широко. Их применение обусловлено повышенной сложностью решаемых задач, жесткими требования- ми к производительности встраиваемых контроллеров управления, необходи- мостью иметь в электронных устройствах развитые пользовательские интер- фейсы, предназначенные для отображения информации, управления, индика- ции и т. д. Типичные для 16- и 32-битных микроконтроллеров приложения (сотовые телефоны, дисководы, модемы и т. п.) предъявляют к встраиваемым управляющим контроллерам непрерывно возрастающие требования. Особенно важно обеспечить их высокую эффективность, сохранив при этом низкую стои- мость, отличавшую 8-битные микроконтроллеры. Значительных успехов в области создании 16/32-битных микропроцессор- ных (микроконтроллерных) ядер добилась британская фирма Advanced RISC Machines (ARM), специализирующаяся на разработке микропроцессоров и пе- риферии к ним, и продающая лицензии на их производство другим фирмам- производителям. 32-битные микроконтроллеры, использующие процессорное ядро с архитектурой ARM, приобрели широкую популярность у разработчиков. Благодаря высокой производительности и выгодному соотношению «цена/ка- чество», микроконтроллеры с ядром ARM представляются многим потребите- лям элементной базы весьма перспективными. Фактически, микроконтролле- ры с ядром ARM сегодня выделились в отдельный класс встраиваемых конт- роллеров — ARM-контроллеров. ’) В отечественной литературе принято употреблять термины «разряд», «разрядный». Но так как современной тенденции в цифровой технике более соответствует употребление понятий «бит», «битный» (бит — двоичный разряд), то в данном издании будет использоваться зарубежная терминология. (Прим, ред.)
10 Предисловие автора Фирма ARM, являясь разработчиком процессорных ядер, не имеет собс- твенного полупроводникового производства и не поставляет готовых кристал- лов. Ядра поставляются заказчикам — производителям микросхем — в форме поведенческого описания на языке VHDL или Verilog (такие ядра называются синтезируемыми), в виде электрической схемы процессорного ядра или в виде топологической макроячейки (описания топологии ядра для реализации в со- ставе интегральной микросхемы). Используя выбранную форму представления ядра, производители элементной базы создают различные модели микроконт- роллеров, дополняя процессорное ядро набором периферийных устройств. При производстве микроконтроллеров используется современная нанотехнология, обеспечивающая минимальные размеры элементов транзисторной структуры микропроцессора 0.25, 0.18 или 0.13 мкм. «Кремниевыми» партнерами фирмы ARM, т. е. компаниями, которые ис- пользуют ее разработки при создании своих приборов, являются такие произ- водители элементной базы, как Alcatel, Atmel, Asahi Kasei Microsystems, Cirrus Logic, Digital, GEC Plessey, Hyundai, Lucent, Lucky GoldStar, NEC, OKI, Philips, Rockwell, Rohm, Samsung, Sharp, Sony, Symbios, Texas Instruments, VLSI, Yamaha. Некоторые из них применяют разработанные фирмой ARM процессоры для ре- шения специальных задач, но чаще всего они используются в устройствах, предназначенных для массового применения (мобильные телефоны, системы управления автомобильными двигателями, лазерные принтеры и т. д.). Пользо- ватель — разработчик аппаратуры — имеет дело с процессорными ядрами ARM, функционирующими в составе готовой микросхемы микроконтроллеров пере- численных производителей. Процессоры ARM поддерживаются многими программными продуктами как самой компании, так и других производителей. Среди этих продуктов, ко- торые образовали солидную инфраструктуру программного обеспечения и средств разработки, — отладчики, компиляторы C/C++, внутрисхемные эму- ляторы, таблицы разработки, операционные системы реального времени, драй- веры низкого уровня, а также программные приложения высокого уровня. Фирмы Accelerated Technology, Enea OSE Systems, ISI, JavaSoft, JMI, Microtec, Microsoft, Perihelion, Psion, Wind River и другие компании обеспечивают сов- местимость своих ОС и средств разработки с процессорами ARM. Фирмой ARM разработан целый ряд 32-битных RISC-процессоров с раз- личными возможностями и различной производительностью, а ядро ARM7, разработанное еще в 1994 году, используется до настоящего времени. Сама фир- ма определяет процессор ARM7 как универсальное ядро 32-битного RISC-мик- ропроцессора с малым энергопотреблением, предназначенное для использова- ния в различных заказных и специальных ИС. Малые размеры RISC-ядра поз- воляют успешно интегрировать его в большие заказные схемы, которые могут содержать RAM, ROM (Flash), DSP, дополнительную логику и другие элементы. К областям применения ядра ARM7 фирма-производитель относит: • телекоммуникации — контроллеры GSM-терминалов; • обмен данными — средства преобразования протоколов и модемы; • портативные вычисления — Palmtop-компьютеры; • портативные измерительные устройства — карманные устройства сбора данных; • автомобильную технику — устройства управления двигателями; • информационные системы — Smart-карты; • средства отображения — JPEG-контроллеры.
Предисловие автора 11 Пришедшее на смену ARM6 THUMB семейство ядер ARM7 THUMB разра- ботано на основе 32-битной целочисленной RISC-архитектуры и обеспечивает максимальную производительность до 130 MIPS. Удельная производительность ядра ARM7 THUMB, изготовленного по 0.18-мкм технологии, составляет 0.9... 1.0 MIPS/МГц тактовой частоты, а энергопотребление составляет не более 0.39...0.40 мВт/МГц. Ядро ARM7TDMI-S, о котором пойдет речь в книге, явля- ется синтезируемым. Все ядра семейства ARM7 THUMB имеют традиционную архитектуру фон Неймана с общей памятью команд и данных. В последующих семействах ARM9 и ARM 10 реализуется гарвардская архитектура с раздельной внутренней кэш- памятью команд и данных. Один из «кремниевых» партнеров ARM, корпорация NXP (до 2006 г. она на- зывалась Philips Semiconductors), выпускает широкую номенклатуру 16/32-бит- ных микроконтроллеров с ядром ARM7TDMI-S — семейство LPC2000. Эти ус- тройства имеют весьма привлекательное для потребителей соотношение «це- на/качество» и обеспечивают производительность в десятки MIPS. Назначением данной книги представляется оказание помощи разработчи- кам в использовании микроконтроллеров семейства LPC2000 при проектирова- нии электронной аппаратуры. В своей справочной части книга основана на пе- реводе оригинальной документации производителя. В целом же, она представ- ляет собой не только справочное пособие для изучения микроконтроллеров семейства LPC2000, но и практическое руководство по их прикладному исполь- зованию. Автор не ставил перед собой задачу создать всеобъемлющий справоч- ник по всем микроконтроллерам семейства LPC2000, в связи с чем, описание ряда периферийных узлов LPC2000 дано в книге на примере нескольких, на- иболее типичных, представителей этого семейства. Книга предназначена для специалистов в области разработки электронной аппаратуры, студентов соответствующих специальностей и радиолюбителей. Предполагается, что читатель знаком с основами цифровой и аналоговой схе- мотехники электронных устройств, а также обладает базовыми навыками про- граммирования на языке С. В первой части книги содержится подробная справочная информация по большинству микроконтроллеров семейства LPC2000, собранная путем перево- да и анализа источников, предлагаемых фирмами ARM и NXP. Сюда входят: пе- речень типовых технических характеристик контроллеров LPC2000, описание их архитектуры и программной модели (дано описание ядра ARM7TDMI-S и приведена его система команд), описание аппаратного построения и програм- мирования большинства периферийных модулей семейства LPC2000, рекомен- дации производителя по программированию и применению отдельных узлов устройств LPC2000. Во второй части книги содержится подробная справочная информация по программному пакету IDE IAR Embedded Workbench™ (IAR EWARM), который представляет собой популярное среди профессиональных разработчиков элект- ронной техники средство разработки/отладки/программирования приложений на основе микроконтроллеров семейства LPC2000. Эта информация дополнена сведениями из личного опыта автора, приобретенного при работе в IAR EWARM с микроконтроллерами LPC2000. Описания программных средств раз- работки-отладки и программирования снабжены примерами, поясняющими их применение на практике. Помимо указанных сведений, во вторую часть книги вошли описания алгоритмов и исходных текстов ряда управляющих программ
12 Предисловие автора на языке С, демонстрирующих пользователю в «железе» работу ядра и основ- ных периферийных узлов одного из представителей семейства LPC2000 — LPC2129. Эти программы написаны и отлажены до рабочего состояния лично автором. Каждая из них является полностью законченным продуктом и, поми- мо демонстрационных компонентов, содержит отдельные программные блоки — драйверы узлов LPC2000 и нескольких внешних устройств. Приведенное в книге встраиваемое программное обеспечение снабжено комментариями на русском языке, что облегчает возможность его применения в пользовательских приложениях, разработанных на базе микроконтроллеров семейства LPC2000. Отличительной особенностью данной книги является то, что она не только содержит сведения справочного характера, но и охватывает все этапы проекти- рования приложений на основе микроконтроллеров LPC2000. Это позволяет в короткие сроки овладеть навыками работы с LPC2000 даже начинающим разра- ботчикам. После прочтения книги им уже не надо будет думать о том, с чего на- чать работу с LPC2000, как написать первую программу, где взять примеры про- граммных кодов для LPC2000, как адаптировать эти примеры под свою задачу, — все эти и многие другие сведения имеются в книге. Материал, изложенный в книге, многократно проверен. Однако, поскольку вероятность технических ошибок все-таки существует, автор не может гаранти- ровать абсолютную точность и правильность приводимых сведений. В связи с этим, автор не несет ответственности за возможные ошибки, связанные с ис- пользованием данной книги.
ЧАСТЬ 1 СПРАВОЧНАЯ ИНФОРМАЦИЯ ПО СЕМЕЙСТВУ LPC2000 Микроконтроллеры семейства LPC2000 представляют собой 32-битные устройства с процессорным ядром ARM7TDMI-S. Со- гласно рекомендациям производителя, они предназначены для использования в автомобилестроении, медицине, сетевых конт- роллерах, а также в промышленной и бытовой электронике, в том числе с батарейным питанием. Выпускаемые в настоящее время приборы работают на тактовой частоте до 60 МГц, обеспечивая производительность до 54 MIPS, имеют встроенную Flash-память объемом 128/256/512 Кбайт со 128-битной шиной, статическую оперативную память (SRAM) объемом 16/32/64 Кбайт, модуль ШИМ, многоканальный 10-битный модуль АЦП, 10-битный модуль ЦАП, интерфейсы l2C, SPI, CAN, два UART (один UART с полным модемным интерфейсом), USB.
ГЛАВА 1 ОБЩЕЕ ОПИСАНИЕ МИКРОКОНТРОЛЛЕРОВ LPC2000 1.1. Характерные особенности микроконтроллеров семейства LPC2000 Микроконтроллеры семейства LPC2000 имеют следующие типовые харак- теристики: • высокопроизводительное 32/16-битное ядро ARM7TDMI-S; • встроенный генератор 1 ...30 МГц со схемой ФАПЧ; • 8/16/32/64 Кбайт памяти типа SRAM (статическое ОЗУ); • 64/128/256/512 Кбайт памяти типа Flash с 128-битной шиной и обраще- нием без цикла ожидания (ресурс не менее 10000 циклов стирания/запи- си в рабочем температурном диапазоне); • стандартный отладочный интерфейс JTAG; • ISP (In-System Programming) внутрисистемное программирование Flash- памяти; • IAP (In-Application Programming) режим побайтового программирования в составе целевой программы (пользовательского приложения). Про- граммирование 512-байтовой (256-байтовой) строки занимает 1 мс, пол- ное стирание всей памяти занимает 400 мс; • работа с командами длиной 32 битов (стандартный режим ARM) и 16 би- тов (режим THUMB); • внешняя 8/16/32-битная шина (только для устройств LPC2000 в 144-вы- водном корпусе); • многоканальный модуль ШИМ; • интерфейсы UART, быстрый 12С (400 Кбит/с), SPI; • интерфейсы CAN с приемными фильтрами; • два 32-битных таймера с каналами сравнения и захвата; • таймер реального времени и сторожевой таймер WDT; • интерфейс USB; • многоканальный 10-битный АЦП, обеспечивающий время преобразова- ния в одном канале 2.44 мкс; • 10-битный модуль ЦАП; • встроенный отладочный интерфейс ICE, позволяющий задавать точки останова; • раздельное питание для ядра и встроенной периферии (1.65...1.95 В/3.0...3.6 В), отключение неиспользуемой периферии, два ре- жима экономии потребляемой мощности; • индивидуальное управление питанием встроенной периферии;
1.2. Приложения 15 • линии ввода/вывода общего назначения GPIO допускают подачу на них напряжения ВЫСОКОГО уровня 5 В (номинальная величина напряже- ния ВЫСОКОГО уровня на этих линиях 3.0...3.6 В). 1.2. Приложения • индустриальный контроль (управление); • медицинские системы; • управление доступом; • межсетевые интерфейсы; • встроенный модем; • универсальные приложения. В сводной таблице Табл. 1.1 приведены основные параметры большинс- тва микроконтроллеров семейства LPC2000. Как можно видеть из таблицы, контроллеры семейства LPC2000 представлены обширным модельным ря- дом и выпускаются в индустриальном и коммерческом исполнениях. Приме- нение в приборах LPC2000 ядра ARM7TDMI-S с встроенным трассировщи- ком (Real-Time Trace) и монитором реального времени (Real-Time Monitor) обеспечивает преимущества, обусловленные широкой поддержкой данного ядра промышленностью и наличием большого выбора программных и аппа- ратных средств разработки (ARM, Ashling, Hitex, Keil Software, IAR, Nohau, Phytec и др.). В ближайших планах фирмы NXP значится дальнейшее расши- рение номенклатуры ARM-микроконтроллеров семейства LPC2000, в част- ности, за счет введения интерфейсов 802.11, Ethernet и наращивания числа встроенных модулей CAN. Помимо уже выпускающихся микроконтролле- ров семейства LPC2000, фирма-производитель недавно объявила о создании новой серии внутри семейства LPC2000 — ARM-7 Mini. На момент написа- ния этой книги было известно о трех представителях новой серии — LPC2101, LPC2102, и LPC2103. Они будут производиться по технологии 0.16 мкм. Наличие 128-битной шины доступа к Flash-памяти позволяет обес- печить работу на частоте до 70 МГц и достичь производительности 63 MIPS, что делает эти микроконтроллеры абсолютными лидерами на рынке Flash ARM7TDMI-S-ycTpohcTB. Предельно допустимые параметры контроллеров LPC2000, описанных в данной книге, приведены в Приложении 1, статические характеристики — в Приложении 2, характеристики АЦП — в Приложении 3, динамические харак- теристики — в Приложении 4. Символ «TBD» (То Be Discussed) в таблицах при- ложений указывает на то, что значение параметра еще не определено произво- дителем.
Таблица 1.1. Сводная таблица микроконтроллеров семейства LPC2000 Устройство ОЗУ Flash- память Таймеры общего назначения [бит] САР/ СОМ 1 Питание модуля RTC Интерфейсы ШИМ АЦП ЦАП Внешняя шина [бит] I/O выводы FCPU Напряжение питания [В] Темпера- турный диапазон Корпус [байт] [байт] защита каналы внутреннее ФАПЧ внешнее 32 кГЦ i CAN | О IdS 1 dSSl asri каналы бит/канал бит/канал Адрес Данные и [МПд] CPU I/O ГС] LPC2101FBD48 2К 8К • 2x32 2x16 7 • • — 2 — 2 2 • — — 10/8 — — — — 32 1...70 1.8 3.3 -40...+85 LQFP48 LPC2102FBD48 4К 16К • 2x32 2x16 7 • • — 2 — 2 2 • — — 10/8 — — — — 32 1...70 1.8 3.3 -40...+85 LQFP48 LPC2103FBD48 8К 32К • 2x32 2x16 7 • • — 2 — 2 2 • — — 10/8 — — — — 32 1...70 1.8 3.3 -40...+85 LQFP48 LPC2104BBD48 16К 128К — 2x32 7 • • — 2 — 1 1 — — 6 — — — — — 32 1...60 1.8 3.3 0...+70 LQFP48 LPC2105BBD48 32К 128К — 2x32 7 • • — 2 — 1 1 — — 6 — — — — — 32 1...60 1.8 3.3 0...+70 LQFP48 LPC2106BBD48 64К 128К — 2x32 7 • • — 2 — 1 1 — — 6 — — — — — 32 1...60 1.8 3.3 0...+70 LQFP48 LPC2106FBD48 64К 128К — 2x32 7 • • — 2 — 1 1 — — 6 — — — — — 32 1...60 1.8 3.3 -40...+85 LQFP48 LPC2106FHN48 64К 128К — 2x32 7 • • — 2 — 1 1 — — 6 — — — — — 32 1...60 1.8 3.3 -40...+85 HVQFN48 LPC2114FBD64 16К 128К • 2x32 8 • • — 2 — 1 2 — — 6 10/4 — — — — 46 1...60 1.8 3.3 -40...+85 LQFP64 LPC2114FHN64 16К 128К • 2x32 8 • • — 2 — 1 2 — — 6 10/4 — — — — 46 1...60 1.8 3.3 -40...+85 HVQFN64 LPC2119FBD64 16К 128К • 2x32 8 • • — 2 2 1 2 — — 6 10/4 — — — — 46 1...60 1.8 3.3 -40...+85 LQFP64 LPC2119FHN64 16К 128К • 2x32 8 • • — 2 2 1 2 — — 6 10/4 — — — — 46 1...60 1.8 3.3 -40...+85 HVQFN64 LPC2124FBD64 16К 256К • 2x32 8 • • — 2 — 1 2 — — 6 10/4 — — — — 46 1...60 1.8 3.3 -40...+85 LQFP64 LPC2124FHN64 16К 256К • 2x32 8 • • — 2 — 1 2 — — 6 10/4 — — — — 46 1...60 1.8 3.3 -40...+85 HVQFN64 LPC2129FBD64 16К 256К • 2x32 8 • • — 2 2 1 2 — — 6 10/4 — — — — 46 1...60 1.8 3.3 -40...+85 LQFP64 LPC2129FHN64 16К 256К • 2x32 8 • • — 2 2 1 2 — — 6 10/4 — — — — 46 1...60 1.8 3.3 -40...+85 HVQFN64 16 Глава 1. Общее описание микроконтроллеров LPC2000
Таблица 1.1. Сводная таблица микроконтроллеров семейства LPC2000 (продолжение) Устройство ОЗУ Flash- память Таймеры общего ‘ назначения [бит] САР/ СОМ 1 Питание модуля RTC Интерфейсы ШИМ АЦП ЦАП Внешняя шина i 0Э О Fcpu Напряжение питания, [В] Темпера- турный диапазон Корпус [байт] [байт] защита | каналы внутреннее ФАПЧ внешнее 32 кГЦ UART | CAN 1 Е СЛ |SSP 1 |USB 1 каналы бит/канал бит/канал Адрес Данные и [М1Щ CPU I/O ГС] LPC2129FHN64 16К 256К • 2x32 8 • • — 2 2 1 2 — — 6 10/4 — — — — 46 1...60 1.8 3.3 —40...+85 HVQFN64 LPC2131FBD64 8К 64К • 2x32 8 • — • 2 — 1 2 — — 6 10/8 10/1 — — — 47 1...60 3.3 —40...+85 LQFP64 LPC2132FBD64 16К 64К • 2x32 8 • — • 2 — 1 2 — — 6 10/8 10/1 — — — 47 1...60 3.3 -40...+85 LQFP64 LPC2134FBD64 16К 128К • 2x32 8 • — • 2 — 1 2 — — 6 10/8 10/1 — — — 47 1...60 3.3 -40...+85 LQFP64 LPC2136FBD64 32К 256К • 2x32 8 • — • 2 — 1 2 — — 6 10/8x2 10/1 — — — 47 1...60 3.3 -40...+85 LQFP64 LPC2138FBD64 32К 512К • 2x32 8 • — • 2 — 2 1 • — 6 10/8x2 10/1 — — — 47 1...60 3.3 -40...+85 LQFP64 LPC2141FBD64 8К 32К • 2x32 8 • — • 2 — 1 2 — • 6 10/8 — — — — 47 1...60 3.3 -40...+85 LQFP64 LPC2142FBD64 16К 64К • 2x32 8 • — • 2 — 1 2 — • 6 10/8 10/1 — — — 47 1...60 3.3 -40...+85 LQFP64 LPC2144FBD64 16К 128К • 2x32 8 • — • 2 — 1 2 — • 6 10/8 10/1 — — — 47 1...60 3.3 -40...+85 LQFP64 LPC2146FBD64 32К 256К • 2x32 8 • — • 2 — 1 2 — • 6 10/8x2 10/1 — — — 47 1...60 3.3 -40...+85 LQFP64 LPC2148FBD64 32К 512К • 2x32 8 • — • 2 — 2 1 • • 6 10/8x2 10/1 — — — 47 1...60 3.3 -40...+85 LQFP64 LPC2194JBD64 16К 256К • 2x32 8 • • — 2 4 1 2 — — 6 10/4 — — — — 46 1...60 1.8 3.3 -40...+105 LQFP64 LPC2210FBD144 16К — — 2x32 8 • • — 2 — 1 2 — — 6 10/8 — 24 32 4 76 1...60 1.8 3.3 -40...+85 LQFP144 LPC2212FBD144 16К 128К • 2x32 8 • • — 2 — 1 2 — — 6 10/8 — 24 32 4 112 1...60 1.8 3.3 -40...+85 LQFP144 LPC2214FBD144 16К 256К • 2x32 8 • • — 2 — 1 2 — — 6 10/8 — 24 32 4 112 1...60 1.8 3.3 -40...+85 LQFP144 LPC2220FBD144 64К — — 2x32 8 • • — 2 — 1 3 — — 6 10/8 — 24 32 4 112 1...60 1.8 3.3 -40...+85 LQFP144 LPC2290FBD144 16К — — 2x32 8 • • — 2 2 1 2 — — 6 10/8 — 24 32 4 76 1...60 1.8 3.3 -40...+85 LQFP144 LPC2292FBD144 16К 256К • 2x32 8 • • — 2 2 1 2 — — 6 10/8 — 24 32 4 112 1...60 1.8 3.3 -40...+125 LQFP144 LPC2294JBD144 16К 256К • 2x32 8 • • — 2 4 1 2 — — 6 10/8 — 24 32 4 112 1...60 1.8 3.3 -40...+125 LQFP144 1.2. Приложения
18 Глава 1. Общее описание микроконтроллеров LPC2000 1.3. Особенности архитектуры Все микроконтроллеры семейства LPC2000 имеют процессорное ядро ARM7TDMI-S с поддержкой эмуляции, шину ARM7 контроллера встроенной памяти, шину АМВА АНВ (Advanced Microcontroller Bus Architecture — Advanced High-performance Bus) контроллера прерываний и шину VPB (VLSI Peripheral Bus) встроенных периферийных устройств. Под периферийные устройства, подключенные к шине АНВ, в общем ад- ресном пространстве программной модели ARM размером 4 Гбайт LPC2000 от- ведено адресное пространство размером 2 Мбайт. Каждому периферийному ус- тройству АНВ выделено адресное пространство размером 16 Кбайт, в пределах адресного пространства периферии АНВ. Под периферийные устройства, подключенные к шине VPB, также отведено адресное пространство размером 2 Мбайт, которое начинается с адреса, находя- щегося на отметке 3.5 Гбайт. Каждому периферийному устройству VPB также выделено адресное пространство размером 16 Кбайт, в пределах адресного про- странства периферии VPB. Сопряжение периферийных устройств АНВ с периферийными устройства- ми VPB осуществляется посредством интерфейса шины VPB к шине АНВ. Для управления связью периферийных устройств с выводами микроконтроллера предназначен блок коммутации выводов (PIN CONNECT BLOCK), который должен быть корректно сконфигурирован пользовательским программным обеспечением и должен соответствовать определенным прикладным требова- ниям для использования периферийных функций и выводов. Подробнее об этом будет рассказано ниже. 1.4. Процессорное ядро ARM7TDMI-S Буквенные обозначения «TDMI-S» в названии ядра ARM7TDMI-S, соглас- но спецификациям фирмы ARM, имеют следующую расшифровку: • Т — указывает на наличие в составе ядра, помимо базовой архитектуры ARM, дополнительной архитектуры THUMB. Это позволяет пользовате- лю выбрать для своего приложения одно из двух состояний (систем ко- манд): ARM или THUMB; • D — ядро имеет в своем составе дополнительные отладочные модули; • М — ядро имеет в своем составе дополнительный аппаратный умножи- тель, позволяющий выполнять команды умножения так называемой длинной формы (с 64-битным результатом); • I — ядро имеет в своем составе встроенную логику отладки (ICE); • S — ядро является полностью синтезируемым, т. е. его функционирова- ние может быть описано на языках описания цифровых устройств VHDL или Verilog. ARM7TDMI-S — универсальный 32-битный микропроцессор, который пот- ребляет сравнительно небольшую мощность и при этом обеспечивает высокую эф- фективность. Архитектура ARM основана на использовании сокращенного набора команд процессора (RISC — Reduced Instruction Set Computer) и реализует намного более простой механизм декодирования команд, нежели у микроконтроллеров с архитектурой, основанной на использовании полного набора команд процессора (CISC — Complex Instruction Set Computer). Эта простота обеспечивает высокую производительность при выполнении каждой команды, а также малое время реак- ции на прерывания в реальном времени. В состав ядра включены отладочные ин-
1.4. Процессорное ядро ARM7TDMI-S 19 терфейсы JTAG и ЕТМ, а также встроенная логическая схема отладки ICE. Упро- щенная блок-схема процессорного ядра ARM7TDMI-S приведена на Рис. 1.1. Бо- лее подробную информацию об архитектуре и особенностях построения ядра ARM7TDMI-S можно найти в технической документации, которая находится на прилагаемом к данной книге компакт-диске, а также в источниках [10, 11]. ADDR [31:0] 5 3 CLK CFGBIGEND nIRQ nFIQ nRESET ABORT LOCK SIZE[1:0] PROT[1:0] Выходы DBG Входы DBG Управление CP Установление связи СР WDATA[31:0] RDATA[31:0] Рис. 1.1. Упрощенная блок-схема процессорного ядра ARM7TDMI-S Для того, чтобы обеспечить непрерывность при обработке программ и обра- щениях к памяти, в ARM7TDMI-S, как и во многих других ядрах, реализован кон- вейер команд. Трехступенчатый конвейер ARM7TDMI-S работает следующим об- разом: пока одна инструкция выполняется, из двух следующих за ней в программе инструкций первая декодируется, а вторая считывается в памяти. Наличие кон- вейера позволяет выполнять последовательно поступающие команды (в том чис- ле, команды умножения), затрачивая на обработку каждой из них один такт. Ядро ARM7TDMI-S, помимо стандартного базового состояния, называемого ARM, также использует уникальное архитектурное решение, известное как со- стояние THUMB. Это решение в большей степени, нежели состояние ARM, под- ходит для крупномасштабных приложений, реализация которых предполагает ограничение объема используемой памяти или размера программного кода. Идея состояния THUMB заключается в использовании уменьшенной, по сравнению с системой команд ARM, системы команд. По существу, процессор ARM7TDMI-S имеет две системы команд: • стандартная 32-битная система команд ARM; • 16-битная система команд THUMB.
20 Глава 1. Общее описание микроконтроллеров LPC2000 При использовании состояния THUMB с 16-битной длиной команды, в ря- де случаев удается достичь двойной плотности относительно стандартного кода ARM; при этом сохраняется большинство функций кода ARM. Дело в том, что код THUMB оперирует тем же самым набором 32-битных регистров, что и код ARM. По некоторым оценкам, код THUMB «ужимается» до 65% размера функ- ционально эквивалентного ему кода ARM, а также обеспечивает до 160% про- изводительности по сравнению с 16-битной процессорной системой, архитек- тура которой отлична от ARM. Процессор ARM7TDMI-S использует следующие типы данных: • слово (32 бита); • полуслово (16 битов); • байт (8 битов). Процессор ARM7TDMI-S рассматривает память как линейное расположе- ние байтов, пронумерованных в возрастающем порядке от нуля: • байты 0...3 содержат первое хранимое в памяти слово; • байты 4...7 содержат второе хранимое в памяти слово; • байты 8... 11 содержат третье хранимое в памяти слово и т. д. Процессор ARM7TDMI-S использует следующие форматы хранения дан- ных (программ) в памяти: • big-endian; • little-endian. В соответствии с форматом big-endian, процессор сохраняет старший байт слова данных (программ) в байте памяти с наименьшим номером, а младший байт слова — в байте памяти с наибольшим номером, как изображено на Рис. 1.2. Например, в байте 0 памяти хранятся биты слова 31...24. 31 24 23 16 15 8 7 0 Адрес слова Старший адрес 8 9 10 11 8 4 5 6 7 4 Младший адрес 0 1 2 3 0 Рис. 1.2. Формат хранения данных (программ) в памяти big-endian В соответствии с форматом little-endian, процессор сохраняет младший байт слова данных (программ) в байте памяти с наименьшим номером, а старший байт слова — в байте памяти с наибольшим номером, как изображено на Рис. 1.3. Например, в байте 0 памяти хранятся биты слова 7...0. 31 24 23 16 15 8 7 0 Адрес слова Старший адрес 11 10 9 8 8 7 6 5 4 4 Младший адрес 3 2 1 0 0 Рис. 1.3. Формат хранения данных (программ) в памяти little-endian В исходном тексте пользовательской встроенной программы с помощью специальных директив можно указать, какой из форматов хранения данных бу- дет использоваться.
1.4. Процессорное ядро ARM7TDMI-S 21 1.4.1. Режимы работы и регистровые модели процессора в состоянии ARM В состоянии ARM процессор может функционировать в одном из следую- щих режимов: 1. User — выполнение программ пользователя. 2. Supervisor — работа под управлением операционной системы (ОС), которая оперирует данными, недоступными программам пользователя. 3. System — режим выполнения системных программ, при котором ОС работа- ет с данными пользователя. 4. IRQ — режим обработки прерываний, в который процессор попадает при поступлении на вход IRQ запроса прерывания низшего уровня. 5. FIQ (Fast IRQ) — режим быстрой реакции на прерывания, в который про- цессор попадает при поступлении на вход FIQ запроса высшего уровня. 6. Abort — режим, в который процессор переходит при ошибке обращения к памяти (обращение по несуществующему адресу, попытка записи в ПЗУ и т. п.). Эти ошибки фиксируются контроллером прерываний, который выдает процессорному ядру запрос на переход в режим Abort. 7. Undefined — режим, в который процессор переходит при выборке непра- вильного кода команды. Все режимы функционирования процессора, кроме' режима User, называ- ются привилегированными. Каждому из них соответствует определенная регис- тровая модель, содержащая набор 32-битных регистров, доступных процессору в этом режиме. Все возможные регистровые модели для состояния ARM приве- дены в Табл. 1.2. В каждом режиме процессору доступны 16 регистров общего назначения R0...R15 и регистр состояния CPSR. Все регистры общего назначе- ния имеют определенные стандартом фирмы ARM дополнительные имена, ко- торые указаны в таблице в скобках. При вызове подпрограмм и организации передачи данных между ними, этот стандарт рекомендует следующее использо- вание регистров общего назначения: • регистры а 1...а4 используются для передачи параметров подпрограммам; • регистры v 1...v8 используются для хранения локальных переменных; • регистр IP служит для хранения промежуточных данных между вызовами процедур. Регистры, имена которых выделены в таблице жирным шрифтом, являются банкированными. Это значит, что они используются только в том режиме, на который указывают их суффиксы (_fiq, _svc, _abt, _irq, _und) вместо соответс- твующих им регистров без суффиксов. При переходе в указанный режим из других режимов, текущее содержимое регистров без суффиксов автоматически переписывается в соответствующие банкированные регистры, а при возврате в прежний режим вновь используются его собственные регистры. Таким обра- зом, суммарное количество физических 32-битных регистров общего назначе- ния, доступное процессору во всех режимах состояния ARM, равно 31, а сум- марное количество доступных процессору физических регистров состояния равно 6 (регистру CPSR соответствуют банкированные регистры с обобщенным форматом имени SPSR_xxx, о чем будет сказано ниже).
22 Глава 1. Общее описание микроконтроллеров LPC2000 Таблица 1.2. Регистровые модели процессорного ядра ARM7TDMI-S в различных режимах состояния ARM User, System FIQ Supervisor Abort IRQ Undefined R0 (al) R0 R0 R0 R0 R0 R1 (a2) R1 R1 R1 R1 R1 R2(a3) R2 R2 R2 R2 R2 R3 (a4) R3 R3 R3 R3 R3 R4(vl) R4 R4 R4 R4 R4 R5(v2) R5 R5 R5 R5 R5 R6 (v3) R6 R6 R6 R6 R6 R7 (v4) R7 R7 R7 R7 R7 R8 (v5) R8_fiq R8 R8 R8 R8 R9 (v6) R9_fiq R9 R9 R9 R9 R10(v7) RIOJiq R10 R10 R10 R10 Rll (v8) Rlljiq Rll Rll Rll Rll R12 (IP) R12_fiq R12 R12 R12 R12 R13(SP) R13_fiq R13_svc R13_abt R13_irq R13_und R14 (LR) R14_fiq R14_svc R14_abt R14_irq R14_und R15(PC) R15 R15 R15 R15 R15 CPSR CPSR CPSR CPSR CPSR CPSR SPSRJiq SPSR_svc SPSR_abt SPSRJrq SPSRjund В базовом режиме User, в котором процессор находится большую часть ра- бочего времени, используются 32-битные регистры R0...R15 и регистр состоя- Регистр R15 выполняет функции программного счетчика (PC). В состоя- нии ARM биты [1] и [0] R15 всегда рав- ны 0, т. е. адреса команд всегда кратны четырем, а в состоянии THUMB бит [0] R15 всегда равен 0, т. е. адреса команд всегда четные. Регистр R14 (LR) используется при вызовах подпрограмм как регистр свя- зи, в котором сохраняется текущее со- держимое PC для возврата в основную программу. Регистр R13 (SP) производитель рекомендует использовать для органи- зации стека в качестве указателя его вершины. ния CPSR. Биты управления Флаги кода Зарезерви- состояния рованы 7 6 5 4 3 2 1 0 31 30 29 28 27 26 25 |N|Z|C|V|4-|-^J|-| |Р|Т|М4|МЗ|М2|М1>И0| |_ Признак переполнения _______ Признак переноса _______ Признак нуля _______ Признак отрицатель- ного результата — Биты режима Бит состояния Запрет FIQ Запрет IRQ Рис. 1.4. Битовая структура регистра состояния CPSR
1.4. Процессорное ядро ARM7TDMI-S 23 Битовая структура регистра состояния CPSR изображена на Рис. 1,4. CPSR содержит следующие биты: • М4.. .МО — определяют режим работы процессора в соответствии с Табл. 1.3; • Т — задает состояние процессора: ARM (Т = 0) или THUMB (Т = 1); • I, F — маскируют (запрещают) обработку прерываний IRQ и FIQ соот- ветственно; • N, Z, С, V — являются признаками: отрицательного результата (N), нуля (Z), переноса (С) и переполнения (V); их значения могут устанавливаться в соответствии с результатом выполнения очередной команды. Таблица 1.3. Задание режимов процессора с помощью битов режима Биты М4...М0 Режим 10000 User 10001 FIQ 10010 IRQ 10011 Supervisor 10111 Abort 11011 Undefined 11111 System Регистр CPSR доступен для записи во всех режимах, кроме режима User. При запуске процессор начинает работу в режиме Supervisor. Переход в ба- зовый режим User реализуется путем записи в регистр CSPR содержимого, в ко- тором биты М4...М0 = 10000. Обратное переключение из режима User в режим Supervisor может быть произведено только при поступлении команды програм- много прерывания, мнемоническое имя которой — SWI. Таким способом обес- печивается доступ пользователя к ресурсам операционной системы. Чтобы из режима Supervisor получить доступ ко всем регистрам режима User, следует вы- полнить переход в режим System. Для этого в регистр CPSR записывается зна- чение битов М4...М0 = 11111. Переход в режимы IRQ, FIQ, Abort, Undefinied происходит автоматически при поступлении соответствующих запросов преры- вания или при наступлении соответствующих событий. При переходе в другой режим текущее содержимое регистра CPSR (слово состояния) автоматически переписывается в регистр SPSR_xxx, соответствую- щий новому режиму, а также автоматически сохраняется в теневом регистре. При возврате в исходный режим содержимое CPSR автоматически восстанав- ливается из сохраненной копии. Кроме того, для каждого режима имеются от- дельные банкированные регистры R13_xxx (SP) и R14_xxx (LR), поэтому при переключении режимов сохраняются текущие значения указателя стека и ре- гистра связи. Таким образом, при возврате к исходному режиму обеспечивается корректное обращение к вершине стека и возможность возврата в основную программу, если перед сменой режима производился вызов подпрограммы. При переходе в режим FIQ (поступление запроса прерывания на вход FIQ), помимо вышеперечисленных регистров, сохраняется текущее содержимое ре- гистров R8...R12, вместо которых в данном случае используются банкирован- ные регистры R8_fiq...R12_fiq. Следовательно, при обработке быстрого преры- вания нет необходимости сохранять содержимое этих регистров в стеке, что, по замыслу производителя, обеспечивает более быструю передачу управления программному блоку обработчика прерываний FIQ и возврат из него.
24 Глава 1. Общее описание микроконтроллеров LPC2000 1.4.2. Способы адресации и система команд ARM Способы адресации операндов, которые может использовать микроконт- роллер ARM7TDMI-S, перечислены в Табл. 1.4. Таблица 1.4. Способы адресации, используемые микропроцессором с ядром ARM7TDMI-S Обозначение Описание #Imm Непосредственная. Операнд Imm входит в состав команды Rn Регистровая. В команде задается имя регистра Rn, содержимое которого является операндом или результатом операции Rn, shift #n Регистровая с масштабированием. При выполнении команды содержимое регистра Rn сдвигается на число битов п, указанное в команде (от 1 до 31). Вместо масштабирующего сдвига shift в ассемблерном тексте используется один из четырех символов, задающих вид производимого сдвига: ) LSL — логический сдвиг влево; LSR — логический сдвиг вправо; ASR — арифметический сдвиг вправо; ROR — циклический сдвиг вправо. При выполнении арифметических и логических сдвигов, последний вы- двигаемый из регистра бит поступает в регистр CPSR в качестве флага признака переноса С. При циклическом сдвиге, бит С включается в цепь сдвига только, если число битов сдвига задано равным нулю. В этом слу- чае выполняется циклический сдвиг операнда на один бит вправо через бит С в регистре CPSR. Описанный способ адресации может применяться, например, в командах пересылки данных MOV [Rn] Косвенно-регистровая. Содержимое указанного регистра Rn содержит ад- рес ячейки памяти, где хранится операнд или результат [Rn,±Imm] {!} Преивдексная с непосредственным смещением. Адресом в команде служит содержимое базового регистра Rn, которое индексируется перед выполне- нием операции путем сложения или вычитания непосредственного опе- ранда 1mm. Если в поле операнда содержится символ {!}, то индексирован- ное содержимое Rn сохраняется после выполнения операции [Rn,±Rm] {!} Преивдексная с регистровым смещением. Адресом в команде служит содер- жимое базового регистра Rn, которое индексируется перед выполнением операции путем сложения или вычитания содержимого регистра Rm. Ес- ли в поле операнда содержится символ {!}, то индексированное содержи- мое Rn сохраняется после выполнения операции [Rn,±Rm, shift #n] Преивдексная с масштабированным регистровым смещением. Адресом в ко- манде служит содержимое базового регистра Rn, которое индексируется перед выполнением операции путем сложения или вычитания масштаби- рованного содержимого регистра Rm [Rn],±Rm Постивдексная с регистровым смещением. Адресом в команде служит со- держимое базового регистра Rn, которое индексируется после выполне- ния операции путем сложения или вычитания содержимого регистра Rm [Rn],±Rm, shift #n Постивдексная с масштабированным регистровым смещением. Адресом слу- жит содержимое базового регистра Rn, которое индексируется после вы- полнения операции путем сложения или вычитания масштабированного содержимого регистра Rm Поскольку ядро ARM7TDMI-S относится к RISC-процессорам, оно выпол- няет относительно небольшой набор команд. Система команд имеет следую- щие характерные особенности: 1. Отсутствует аппаратная поддержка стека. Стек организуется программно, причем в качестве указателя стека рекомендуется использовать регистр R13
1.4. Процессорное ядро ARM7TDMI-S 25 (SP), хотя для этого можно использовать и любой другой регистр общего на- значения. Операции со стеком в программе производятся с помощью ко- манд групповой пересылки регистров STM и LDM. 2. Установка в регистре CSPR флагов признаков N, Z, С и V по результатам выполнения команд производится при наличии в команде суффикса S. Если этот суффикс отсутствует, признаки в регистре CPSR не изменяются. 3. Любая команда может быть условной, если она снабжена соответствующим суффиксом условного выполнения. Виды суффиксов и соответствующих им условий приведены в Табл. 1.5. Таблица 1,5. Суффиксы для организации условных операций (в формате ассемблерных команд обобщенно обозначаются {cond}) Операция Описание Ассемблерная мнемоника EQ Z=1 Равно NE z = o He равно CS/HS C=1 Выше или равно (для чисел без знака — больше или равно) CC/LO c = o Ниже (для чисел без знака — меньше) MI N= 1 Отрицательный результат PL N = 0 Положительный результат или ноль VS V=1 Переполнение VC V=0 Нет переполнения HI C=1,Z = O Выше (для чисел без знака — больше) LS C = 0, Z=1 Ниже или равно (для чисел без знака — меньше или равно) GE N = V Больше или равно (для чисел со знаком) LT N*V Меньше (для чисел со знаком) GT Z = 0, N = V Больше (для чисел со знаком) LE Z=1,N*V Меньше или равно (для чисел со знаком) AL Всегда (этот суффикс обычно опускается) При наличии суффикса AL команда выполняется безусловно (при любых значениях признаков). Условия «выше», «ниже», «выше или равно», «ниже или равно» используются при сравнении чисел без знака. Условия «больше», «мень- ше», «больше или равно», «меньше или равно» используются при сравнении чисел со знаком. Условные ключевые обозначения, используемые при описании форматов и ассемблерных мнемоник команд процессора ARM7TDMI-S, приведены в Табл. 1.6.
26 Глава 1. Общее описание микроконтроллеров LPC2000 Таблица 1.6. Ключевые обозначения, используемые в командах ядра ARM7TDMI-S Ключевое обозначение Описание {cond} См. Табл. 1.5 <0pmd2> См. Табл. 1.14 {field} См. Табл. 1.15 label Метка (адрес) в памяти S Суффикс обновления флагов (необязателен) В Операция с байтом (необязателен) H Операция с полусловом (необязателен) T Суффикс привилегированных пользовательских режимов. Не может использовать- ся с преиндексной адресацией <a_mode2> См. Табл. 1.8 <a_mode2P> См. Табл. 1.9 <a_mode3> См. Табл. 1.10 <a_mode4L> См. Табл. 1.11 <a_mode4S> См. Табл. 1.12 <a_mode5> См. Табл. 1.13 32bit_Imm 32-битная константа, формируемая путем циклического сдвига вправо 8-битного значения на четное число битов 24bit_Imm 24-битная константа в явном виде 8*4bit_Imm 10-битная константа, формируемая путем сдвига влево 8-битного значения на два бита 7*4bit_Imm 9-битная константа, формируемая путем сдвига влево 7-битного значения на два бита 5*4bit_Imm 7-битная константа, формируемая путем сдвига влево 5-битного значения на два бита 5*2bit_Imm 6-битная константа, формируемая путем сдвига влево 5-битного значения на один бит 12bit_Imm 12-битная константа в явном виде 8bit_Imm 8-битная константа в явном виде 5bit_Imm 5-битная константа в явном виде 3bit_Imm 3-битная константа в явном виде <reglist> Разделенный запятыми список регистров, заключенных в фигурные скобки ({and}) temp Теневой регистр, используемый для временного хранения RdLo, RdHi Регистры общего назначения в состоянии ARM, содержащие младшую и старшую половины числа (результата операции) соответственно Lo Регистры R0...R7 в состоянии THUMB Hi Регистры R8...R15 в состоянии THUMB {!} Содержимое базового регистра обновляется после перемещения данных, если в ко- манде имеется символ «!» +/- + или - (знак «+» может быть опущен)
1.4. Процессорное ядро ARM7TDMI-S 27 Полный список команд процессорного ядра ARM7TDMI-S для состояния ARM приведен в Табл. 1.7. Таблица 1.7. Список команд ARM Описание Ассемблерная мнемоника Обновле- ние флагов Действие Команды пересылки Пересылка MOV{cond}S Rd, <0prnd2> N, Z, С Rd:= 0pmd2 Пересылка с побит- ной инверсией (NOT) MVN{cond}S Rd, <0prnd2> N, Z,C Rd:= OxFFFFFFFF EOR <Opmd2> Пересылка SPSR в регистр MRS{cond} Rd, SPSR Rd:= SPSR Пересылка CPSR в регистр MRS{cond} Rd, CPSR Rd:= CPSR Пересылка из регис- тра в SPSR MSR{cond} SPSR{field}, Rm SPSR:= Rm Пересылка из регис- тра в CPSR MSR{cond} CPSR{field), Rm CPSR:= Rm Пересылка непос- редственного значе- ния во флаги SPSR MSR{cond} SPSR{field},#32bit_Imm SPSR:= #32bit_Imm (только выбранные байты) Пересылка непос- редственного значе- ния во флаги CPSR MSR{cond} CPSR{field},#32bit_Imm CPSR:= #32bit_Imm (только выбранные байты) Арифметические команды Сложение ADD{cond}S Rd, Rn <0prnd2> N, Z, С, V Rd:= Rn + 0pmd2 Сложение с учетом переноса ADC{cond}S Rd, Rn <0prnd2> N, Z, C,V Rd:= Rn + Opmd2 + Cany Вычитание SUB{cond}S Rd, Rn <0prnd2> N, Z, C,V Rd:= Rn - 0pmd2 Вычитание с учетом заема SBC{cond}S Rd, Rn <0prnd2> N,Z, C,V Rd:= Rn + 0pmd2 - - NOT(Carry) Обратное вычитание RSB{cond}S Rd, Rn <0prnd2> N, Z, C,V Rd:= 0pmd2 - Rn Обратное вычита- ние с учетом заема RSC{cond}S Rd, Rn <Oprnd2> N,Z, C,V Rd:= 0pmd2 - Rn - - NOT(Carry) Короткое умножение MUL{cond}S Rd, Rm, Rs N, Z,C Rd:= (Rm x Rs) [31:0] Короткое умноже- ние с накоплением MLA{cond}S Rd, Rm, Rs, Rn N, Z, C, Rd:= ((Rm x Rs) + Rn) [31:0] Длинное умножение беззнаковых чисел UMULL{cond}S RdLo, RdHi, Rm, Rs N,Z, C,V RdHi, RdLo:= беззнаковое (Rm x Rs) Длинное умножение беззнаковых чисел с накоплением UMLAL{cond}S RdLo, RdHi, Rm, Rs N, Z, C,V RdHi, RdLo:= беззнаковое (RdHi, RdLo + Rm x Rs) Длинное умножение чисел со знаком SMULL{cond}S RdLo, RdHi, Rm, Rs N, Z, С, V RdHi, RdLo:= знаковое (Rm x Rs) Длинное умножение чисел со знаком с накоплением SMLAL{cond}S RdLo, RdHi, Rm, Rs N, Z, C,V RdHi, RdLo:= знаковое (RdHi, RdLo + Rm x Rs) Сравнение CMP{cond} Rd, <0prnd2> N,Z, C,V Обновление флагов CPSR по результатам операции Rn - Opmd2 Сравнение с отрица- тельным числом CMN{cond} Rd, <Oprnd2> N, Z, С, V Обновление флагов CPSR по результатам операции Rn + Opmd2
28 Глава 1. Общее описание микроконтроллеров LPC2000 Таблица 1. 7. Список команд ARM (продолжение) Описание Ассемблерная мнемоника Обновле- ние флагов Действие Логичекие команды Тестирование битов TST{cond} Rd, <0prnd2> N, Z, С Обновление флагов CPSR по результатам операции Rn AND 0pmd2 Побитное сравнение TEQ{cond} Rd, <0prnd2> N,Z,C Обновление флагов CPSR по результатам операции Rn EOR 0pmd2 Логическое И AND{cond}S Rd, Rn <0prnd2> N,Z,C Rd:=RnAND 0pmd2 Исключающее ИЛИ EOR{cond}S Rd, Rn <0prnd2> N, Z,C Rd:= Rn EOR 0pmd2 Логическое ИЛИ ORR{cond}S Rd, Rn <0prnd2> N, Z,C Rd:= Rn OR Oprnd2 Очистка битов (мас- кирование) BIC{cond}S Rd, Rn <0prnd2> N, Z,C Rd:=RnANDNOT 0pmd2 Пустая операция NOP Нет операции Команды передачи управления Переход B{cond} label R15:= label ° Переход с сохране- нием адреса возврата BR14 BL{cond} label R14—R15- 4, R15:= label ’> Переход с возмож- ностью смены состо- яния BX{cond} Rm R15:= Rm, переход в THUMB, если Rm[0] = 1 Команды загрузки из памяти Загрузка слова LDR{cond} Rd, <a_mode2> Rd:= [адрес]2) Загрузка слова в привилегирован- ных пользователь- ских режимах LDR{cond}T Rd, <a_mode2P> Rd:= [адрес]2) Загрузка байта LDR{cond}B Rd, <a_mode2> Rd:= нулевое дополне- ние [байт из адреса]2) Загрузка байта в привилегированных пользовательских режимах LDR{cond}BT Rd, <a_mode2P> Rd:= нулевое дополне- ние [байт из адреса]2) Загрузка байта со знаком LDR{cond}SB Rd, <a_mode3> Rd:= знаковое дополне- ние [байт из адреса]2) Загрузка полуслова LDR{cond}H Rd, <a_mode3> Rd:= нулевое дополнение [полуслово из адреса]2) Загрузка полуслова со знаком LDR{cond}SH Rd, <a_mode3> Rd:= знаковое дополне- ние [полуслово из адреса] Групповая загрузка в операции со сте- ком (POP) LDM{cond}<a_mode4L> Rd{’}, <reglist-pc> Загрузка списка регистров с указателем [Rn] Групповая загрузка в операции со сте- ком (POP) с возвра- том (и обменом) LDM{cond}<a_mode4L> Rd{I}, <reglist+pc> Загрузка списка регист- ров, R15:= [адрес] [31:1] Групповая загрузка в операции со сте- ком (POP) и сохра- нением CPSR LDM{cond}<a_mode4L> Rd{’}, <reglist+pc>A Загрузка списка регист- ров, CPSR:= SPSR
1.4. Процессорное ядро ARM7TDMI-S 29 Таблица 1.7. Список команд ARM (продолжение) Описание Ассемблерная мнемоника Обновле- ние флагов Действие Групповая загрузка пользовательских регистров LDM{cond}<a_mode4L> Rd{’}, <reglist-pc>A Загрузка списка регистров используемого режима с указателем [Rn]3> Команды сохранения в памяти Сохранение слова STM{cond} Rd, <a_mode2> [адрес] := Rd Сохранение слова в привилегированны х пользовательских режимах STM{cond}T Rd, <a_mode2P> [адрес] := Rd Сохранение байта STM{cond}B Rd, <a_mode2> [адрес] [7:0]:= Rd[7:0] Сохранение байта в привилегированны х пользовательских режимах STM{cond]BT Rd, <a_mode2P> [адрес] [7:0] :=Rd[7:0] Сохранение полуслова STM{cond]H Rd, <a_mode3> [адрес] [ 15:0] := Rd[ 15:0] Групповое сохране- ние в операции со стеком (PUSH) STM{cond}<a_mode4S> Rn{’}, <reglist> Сохранение списка регис- тров с указателем [Rn] Групповое сохране- ние пользователь- ских регистров STM{cond}<a_mode4S> Rn{'}, <reglist>A Сохранение списка регис- тров используемого режи- ма с указателем [Rn]3) Команды обмена Обмен словами SWP{cond} Rd, Rm, [Rn] temp:= [Rn], [Rn]:= Rm, Rd:= temp Обмен байтами SWP{cond}B Rd, Rm, [Rn] temp:= нулевое заполне- ние (Rn [7:0]), Rn[7:0]:= Rm[7:0], Rd:= temp Команды сопроцессора Операции с данными (выполнение коман- ды сопроцессором) CDP{cond} <cpnum>, <opl>, CRd, CRn, CRm, <op2> Сопроцессор определен Пересылка из регис- тров ARM в регист- ры сопроцессора MRC{cond} <cpnum>, <opl>, Rd, CRn, CRm, <op2> Сопроцессор определен Пересылка из регис- тров сопроцессора в регистры ARM MCR{cond} <cpnum>, <opl>, Rd, CRn, CRm, <op2> Сопроцессор определен Загрузка данных в сопроцессор из памяти LDC{cond] <cpnum>, CRd, <a_mode5> Сопроцессор определен Сохранение регист- ров сопроцессора в памяти STC{cond} <cpnum>, CRd, <a_mode5> Сопроцессор определен Программное прерывание SWI{cond} <24bit_Imm> Переход в режим Supervisor, LR:= PC, РС:= 0x0008 (24-битное значение содержится в ко- де команды) ° Метка label должна находиться в пределах ±32 Мбайт от текущей команды. 2) В качестве Rd нельзя указывать R15. 3) Используется только в привилегированных режимах.
30 Глава 1. Общее описание микроконтроллеров LPC2000 Режим адресации, обозначенный при описании форматов и ассемблерных мнемоник команд процессора ARM7TDMI-S как <a_mode2>, описан в Табл. 1.8. Режим адресации, обозначенный при описании форматов и ассемблерных мнемоник команд процессора ARM7TDMI-S как <a_mode2P>, описан в Табл. 1.9. Таблица 1.8. Режим адресации 2 (<a_mode2>), используемый в командах перемещения слов или байтов без знака Операция Ассемблерная мнемоника Примечание Преиндексное непосредствен- ное смещение [Rn, #+/-12bit_Inun] {!} Преиндексное нулевое смещение [Rn] Эквивалентно [Rn, #0] Преиндексное регистровое смещение [Rn, +/-Rm] {!} Преиндексное масштабирован- ное регистровое смещение [Rn, #+/-Rm, LSL #5bit_Imm] {!} Допустимые сдвиги 0...31 [Rn, #+/-Rm, LSR #5bit_Imm] {!} Допустимые сдвиги 1...32 [Rn, #+/-Rm, ASR #5bit_Imm] {!} Допустимые сдвиги 1...32 [Rn, #+/-Rm, ROR #5bit_Imm] {!} Допустимые сдвиги 1... 31 [Rn, #+/-Rm, RRX] {!} Постиндексное непосредствен- ное смещение [Rn], #+/-12bit_Imm Постиндексное регистровое смещение [Rn], #+/-Rm Постиндексное масштабирован- ное регистровое смещение [Rn], #+/-Rm, LSL #5bit_Imm Допустимые сдвиги 0...31 [Rn], #+/-Rm, LSR #5bit_Imm Допустимые сдвиги 1...32 [Rn], #+/-Rm, ASR #5bit_Imm Допустимые сдвиги 1...32 [Rn], #+/-Rm, ROR #5bit_Imm Допустимые сдвиги 1... 31 [Rn], #+/-Rm, RRX Таблица 1.9. Режим адресации 2 (<a_mode2P>), используемый в привилегированных пользовательских режимах только с постиндексным смещением Операция Ассемблерная мнемоника Примечание Постиндексное непосредствен- ное смещение [Rn], #+/-12bit_Imm Постиндексное нулевое смеще- ние [Rn] Эквивалентно [Rn], #0 Постиндексное регистровое смещение [Rn], #+/-Rm Постиндексное масштабирован- ное регистровое смещение [Rn], #+/-Rm, LSL #5bit_Imm Допустимые сдвиги 0...31 [Rn], #+/-Rm, LSR #5bit_Imm Допустимые сдвиги 1...32 [Rn], #+/-Rm, ASR #5bit_Imm Допустимые сдвиги 1...32 [Rn], #+/-Rm, ROR #5bit_Imm Допустимые сдвиги 1...31 [Rn], #+/-Rm, RRX
1.4. Процессорное ядро ARM7TDMI-S 31 Таблица 1.10. Режим адресации 3 (<a_mode3>) для команд перемещения полуслов и байтов со знаком Операция Ассемблерная мнемоника Примечание Преиндексное непосредственное смещение [Rn, #+/- 8bit_Imm] {!} Преиндексное нулевое смещение [Rn] Эквивалентно [Rn, #0] Преиндексное регистровое смещение [Rn, +/-Rm] {!} Постиндексное непосредственное смещение [Rn], #+/- 8bit_Imm Постиндексное регистровое смещение [Rn], +/-Rm Режим адресации, обозначенный при описании форматов и ассемблерных мнемоник команд процессора ARM7TDMI-S как <a_mode3>, описан в Табл. 1.10. Для того чтобы уточнить синтаксис ассемблерных команд ARM7TDMI-S состояния ARM, рекомендуется обратиться к источникам [2, 3], а также к фай- лам технической документации, которые находятся на прилагаемом к данной книге компакт-диске. В отношении команд ARM ARM7TDMI-S, перечисленных в Табл. 1.7, не- обходимо сделать следующие дополнительные пояснения: 1. При записи в регистр CPSR командой MSR в режиме User изменяются толь- ко флаги признаков N, Z, V и С, содержащиеся в поле флагов состояния CPSR_f, а остальные биты сохраняют свое прежнее значение. В любом ре- жиме с помощью команды MSR нельзя изменить бит Т регистра CPSR. 2. Ядро ARM7TDMI-S выполняет несколько разновидностей операции умно- жения. Существуют две основные команды — простое умножение MUL и ум- ножение с накоплением MLA Каждая из этих команд может иметь короткую форму (результат записывается в один регистр с потерей старших битов) либо длинную форму (результат записывается в два регистра). В ассемблерной мнемонике команды длинная форма имеет суффикс L. С короткой формой команды операции умножения можно производить как со знаковыми, так и с беззнаковыми целыми числами. Длинная форма команды умножения имеет два различных варианта — знаковый и беззнаковый, которые отличаются префиксом S и U соответственно. Таким образом, команда умножения имеет следующие разновидности: MUL, SMULL, UMULL. Аналогично, команда умножения с накоплением имеет разновидности MLA, SMLAL, UMLAL. 3. Команда обратного вычитания RSB позволяет изменить порядок записи операндов в операции вычитания на обратный. Она соответствует последо- вательности команд «Вычесть из операнда <Oprnd2> содержимое регистра Rn и записать результат в регистр Rd». Команда CMN позволяет сравнить два операнда, у одного из которых перед сравнением изменяется знак. 4. Команды передачи управления служат для изменения хода выполнения программы. Команда перехода В с соответствующим суффиксом условия (Табл. 1.5) обеспечивает выполнение условных или безусловных переходов. Переход к подпрограмме осуществляется командой BL, при этом текущее содержимое программного счетчика PC (адрес возврата) сохраняется в ре- гистре связи LR. В качестве операнда в команде задается смещение label, ко-
32 Глава 1. Общее описание микроконтроллеров LPC2000 торое, с учетом знакового расширения, добавляется к текущему содержимо- му PC. При вызове вложенных подпрограмм необходимо программно организовать сохранение промежуточных значений адресов возврата (со- держимого LR) в стеке, используя регистр SP в качестве указателя. Также программно обеспечивается в случае необходимости сохранение в стеке со- держимого рабочих регистров. Указанный в команде адрес перехода должен быть четным, если процессор находится в состоянии THUMB, или кратным четырем, если процессор находится в состоянии ARM. 5. Команда ВХ используется для программной смены состояния процессора, поскольку позволяет осуществить переход с одновременным изменением этого состояния. Адрес перехода (четный или кратный четырем) определя- ется битами 31... 1 или 31...2 содержимого регистра Rm, заданного в коман- де, а состояние процессора — нулевым битом этого регистра, который копи- руется в регистр CPSR в качестве бита Т. 6. Команда программного прерывания SWI используется для доступа к функ- циям ОС. При выполнении данной команды процессор переходит в режим Supervisor, запоминает адрес возврата в регистре LR и переходит на адрес 0x0008По этому адресу располагается команда перехода на обработчик прерывания. Необходимо заметить, что выполнение команды SWI — это единственный способ, позволяющий перевести процессор из режима User в привилегированный режим Supervisor. 7. Группа команд сопроцессора обеспечивает совместную работу процессора ARM с сопроцессором, который обычно представляет собой размещенный на одном кристалле с процессором специализированный блок. К процессорному ядру ARM может быть подключено до 16 сопроцессоров, каждый из которых может иметь до 16 собственных регистров CRn. Данные, передаваемые сопро- цессору по внутренней шине, включают в себя номер сопроцессора <cpnum>, номера регистров сопроцессора, код операции, поле дополнительной инфор- мации. От сопроцессора требуется возможность принимать команду, испол- нять ее и выдавать на шину результат. При этом один из регистров сопроцес- сора CRn должен выполнять функцию регистра команд — воспринимать записанные в него данные как код операции (команду сопроцессора). После ввода в этот регистр кода операции процессор должен послать команду CDP, которая будет выполняться сопроцессором. Ввод/вывод данных в регистры сопроцессора реализуется с помощью команд LDC, STC, MCR, МРС. Примечание. В микроконтроллерах семейства LPC2000 сопроцессор отсутствует. 8. Команды групповой загрузки/сохранения содержимого регистров LDM/STM позволяют пересылать содержимое нескольких перечисленных в них регистров. В формате команды имеется 16-битное поле, где каждый бит соответствует одному из регистров R15...R0. Если бит равен единице, то со- держимое соответствующего ему регистра сохраняется в памяти (по коман- де STM) или загружается из памяти (по команде LDM). Как видно из Далее в книге все адреса регистров и областей памяти приведены в шестнадцатиричном виде (за исключением случаев, когда специально указан другой вид представления адресов). Значения регистров и отдельных битов приведены в двоичном формате (если не указано иное), а остальные числовые величины — в десятичном. (Прим. науч, ред.)
1.4. Процессорное ядро ARM7TDMI-S 33 Табл. 1.7, команды LDM и STM могут модифицировать базовый регистр. Применительно к стековым операциям, в качестве базового регистра обыч- но выступает указатель вершины стека R13 (SP). Таким образом, LDM и STM позволяют одной командой осуществлять операции помещения в стек (PUSH) и выталкивания из стека (POP) произвольного количества регист- ров. Команды LDM и STM могут работать с несколькими типами стека, поддерживаемыми процессором ARM7TDMI-S: • убывающий/возрастающий стек — стек растет вниз, начинаясь с большего адреса и наращиваясь к меньшему (убывающий стек), или вверх, начина- ясь с меньшего адреса и наращиваясь к большему (возрастающий стек); • полный/пустой стек — указатель вершины стека может указывать на пос- ледний элемент в стеке (полный стек) или на следующую свободную ячейку в стеке (пустой стек). В Табл. 1.11, Табл. 1.12 приведены суффиксы, задающие способ модифика- ции базового регистра в командах LDM и STM при групповом перемещении регистров общего назначения и при операциях со стеком. Эти суффиксы обоз- начены при описании форматов и операционных кодов команд LDM и STM процессора ARM7TDMI-S соответственно как <a_mode4L> и <a_mode4S>. Следует заметить, что суффиксы операций со стеком могут использоваться вместо суффиксов перемещения регистров общего назначения. Режим адресации, обозначенный при описании форматов и операционных кодов команд процессора ARM7TDMI-S как <a_mode5>, описан в Табл. 1.13. Таблица 1.11. Режим адресации 4 (<a_mode4L>) для команд загрузки Групповая загрузка Помещение в стек (PUSH) IA Инкремент после FD Полный убывающий стек IB Инкремент до ED Пустой убывающий стек DA Декремент после FA Полный возрастающий стек DB Декремент до ЕА Пустой возрастающий стек Таблица 1.12. Режим адресации 4 (<a_mode4S>) для команд сохранения Групповое сохранение Выталкивание из стека (POP) IA Инкремент после ЕА Пустой возрастающий стек IB Инкремент до FA Полный возрастающий стек DA Декремент после ED Пустой убывающий стек DB Декремент до FD Полный убывающий стек Таблица 1.13. Режим адресации 5 (<a_mode5>) для команд сопроцессора Операция Ассемблерная мнемоника Примечание Преиндексное непосредственное смещение [Rn, #+/- <8*4bit_Imm>] {!} Преиндексное нулевое смещение [Rn] Эквивалентно [Rn, #0] Постиндексное непосредственное смещение [Rn], #+/- <8*4bit_Imm> 304
34 Глава 1. Общее описание микроконтроллеров LPC2000 При выполнении арифметических и логических операций один из операн- дов размещается в регистре, а второй (<Opmd2>) — в регистре, ячейке памяти или задается непосредственно. Результат всегда размещается в регистре Rd. Следует заметить, что процессор не выполняет операцию деления, которая должна реализоваться программно, например, с помощью вызова соответству- ющей подпрограммы. Возможные типы второго операнда (<Opmd2>), исполь- зуемого в командах, приведены в Табл. 1.14. Суффиксы, которые используются в командах пересылки с участием регис- тров SPSR и CPSR, приведены в Табл. 1.15. Эти суффиксы для указанных ко- манд являются обязательными, т. е. с именем регистра SPSR или CPSR в ко- манде необходимо указать один из суффиксов {field}. Таблица 1.14.1йпы операнда 2 (<Oprnd2>) в командах ARM Операция Ассемблерная мнемоника Примечание Непосредственное значение #32bit_Imm Логический сдвиг влево непосредственным значением Rm, LSL #5bit_Imm Допустимые сдвиги 0...31 Логический сдвиг вправо непосредственным значением Rm, LSR #5bit_Imm Допустимые сдвиги 1...32 Арифметический сдвиг вправо непосредственным значением Rm, ASR #5bit_Imm Допустимые сдвиги 1...32 Циклический сдвиг вправо непосредственным значением Rm, ROR #5bit_Imm Допустимые сдвиги 1...31 Регистр Rm Дополнительный сдвиг вправо Rm, RRX Логический сдвиг влево значением регистра Rm, LSL Rs Логический сдвиг вправо значением регистра Rm, LSR Rs Арифметический сдвиг вправо значением регистра Rm, ASR Rs Циклический сдвиг вправо значением регистра Rm, ROR Rs Таблица 1.15. Суффиксы ({field}) в кодах операций команд пересылки с участием регистров SPSR и CPSR Суффикс Установка Примечание _с Битовая маска битов управления SPSR[7:0] или CPSR[7:0] _f Битовая маска битов флагов SPSR[31:24] или CPSR[31:24] _s Битовая маска битов состояния SPSR[23:16] или CPSR[23:16] _х Битовая маска дополнительных битов SPSR[15:8] или CPSR[15:8] 1.4.3. Регистровые модели процессора в состоянии THUMB Как было сказано выше, переход процессора из состояния ARM в состоя- ние THUMB и обратно производится с помощью команды ВХ. Состояние THUMB отличается от состояния ARM длиной команд: в состоянии THUMB
1.4. Процессорное ядро ARM7TDMI-S 35 команды не 32-, а 16-битные. При выполнении программы, встроенный деко- дер преобразует команды, записанные в системе THUMB, в команды ARM. Вследствие компактности используемых форматов, система команд THUMB имеет ряд особенностей и ограничений по сравнению с системой ARM. Набор регистров в состоянии THUMB сокращен по сравнению с набором регистров, доступных в состоянии ARM. Все возможные регистровые модели для состоя- ния THUMB приведены в Табл. 1.16. Таблица 1.16. Регистровые модели процессорного ядра ARM7TDMI-S в различных режимах состояния THUMB User, System FIQ Supervisor Abort IRQ Undefined RO (al) RO RO RO RO RO R1 (a2) R1 R1 R1 R1 R1 R2 (a3) R2 R2 R2 R2 R2 R3 (a4) R3 R3 R3 R3 R3 R4 (vl) R4 R4 R4 R4 R4 R5 (v2) R5 R5 R5 R5 R5 R6 (v3) R6 R6 R6 R6 R6 R7 (v4) R7 R7 R7 R7 R7 SP SP.fiq SP_svc SP.abt SP_irq SP_und LR LR_fiq LR_svc LR_abt LR_irq LR_und PC PC PC PC PC PC CPSR CPSR CPSR CPSR CPSR CPSR SPSRJiq SPSR_svc SPSR_abt SPSRJrq SPSR_und В коде операции большинства команд THUMB под номер регистра отведе- но только 3 бита, поэтому прямое обращение возможно только к восьми регис- трам: R0...R7. Регистры R8...R12 доступны только через специальные команды загрузки. Регистры SP и LR выполняют фиксированные функции указателя вершины стека и регистра связи, соответственно. В состоянии THUMB имеют- ся специальные команды, ориентированные на работу с этими регистрами: за- грузка в стек проходит только через регистр SP, адрес возврата из подпрограм- мы сохраняется только в регистре LR. 1.4.4. Система команд THUMB Полный список команд ARM7TDMI-S для состояния THUMB приведен в Табл. 1.17. Для того чтобы уточнить синтаксис ассемблерных команд ARM7TDMI-S состояния THUMB, можно обратиться к источникам [10, 11], а также к файлам документации, которые находятся на прилагаемом к данной книге компакт-диске.
36 Глава 1. Общее описание микроконтроллеров LPC2000 Таблица 1.17. Список команд THUMB Описание Ассемблерная мнемоника Обновле- ние фла- гов Действие Команды пересылки Непосредствен- ное значение MOV Rd, #<8bit_Imm> N,Z Rd:= 8bit_Imm (8-битное не- посредственное значение) Из Lo в Lo MOV Rd, Rm N,Z Rd:= Rm (сбрасываются флаги ChV) Из Hi в Lo, из Lo в Hi, из Hi в Hi MOV Rd, Rm Rd:= Rm (нет из Lo в Lo; флаги не изменяются) Команды арифметические Сложение с непос- редственным 3-бит- ным значением ADD Rd, Rn, #<3bit_Imm> N, Z, С, V Rd:= Rn + 3bit_Imm (3-битное непосредственное значение) Сложение Lo с Lo ADD Rd, Rn, Rm N, Z, С, V Rd:= Rn + Rm Сложение Hi с Lo, LocHi, HicHi ADD Rd, Rm Rd:= Rn + Rm (нет Lo c Lo; флаги не изменяются) Сложение с непос- редственным 8- битным значением ADD Rd, #<8bit_Imm> N, Z, C,V Rd:= Rd + 8bit_Imm (8-битное непосредственное значение) Сложение с уче- том переноса ADC Rd, Rm N, Z,C,V Rd:= Rd + Rm + Carry Сложения значе- ния с SP ADD SP, #<7*4bit_Imm > R13:= R13 + 7 * 4bit_Imm (9-бит- ное непосредственное значение, выровненное в границах слова. Флаги не изменяются) Формирование адреса через SP ADD Rd, SP, #<8*4bit_Imm > Rd:= R13 + 8*4bit_Imm (10-бит- ное непосредственное значе- ние, выровненное в границах слова. Флаги не изменяются) Формирование адреса через PC ADD Rd, PC, #<8*4bit_Imm > Rd:= (R15 AND OxFFFFFFFC)+ + 8*4bit_Imm (10-битное непос- редственное значение, выров- ненное в границах слова. Флаги не изменяются) Вычитание SUB Rd, Rn, Rm N, Z, C,V Rd:= Rn - Rm Вычитание непос- редственного 3-битного значения SUB Rd, Rn, #<3bit_lmm> N, Z, С, V Rd:= Rn - 3bit_Imm (3-битное непосредственное значение) Вычитание непос- редственного 8-битного значения SUB Rd, #<8bit_Imm> N, Z,C,V Rd:= Rd - 8bit_Imm (8-битное непосредственное значение) Вычитание с учетом заема SBC Rd, Rm N, Z, С, V Rd:= Rd - Rm - NOT(Carry) Вычитание значе- ния из SP SUB SP, #<7*4bit_Imm > R13:= R13 - 7*4bit_Imm (9-бит- ное непосредственное значе- ние, выровненное в границах слова. Флаги не изменяются) Смена знака (негатив) NEG Rd, Rm N, Z, C,V Rd:= - Rm Умножение MUL Rd, Rm N, Z, Rd:= Rd * Rm (флаги С и V)
1.4. Процессорное ядро ARM7TDMI-S 37 Таблица 1.17. Список команд THUMB (продолжение) Описание Ассемблерная мнемоника Обновле- ние фла- гов Действие Сравнение CMP Rn, Rm N, Z, С, V Обновление флагов CPSR по результатам операции Rn — Rm (производится для Lo — Lo, Lo-Hi, Hi-Hi) Сравнение с отри- цательным числом CMN Rn, Rm N, Z, C,V Обновление флагов CPSR no результатам операции Rn + Rm Сравнение с не- посредственным значением CMP Rn, #<8bit_Imm> N, Z, C,V Обновление флагов CPSR по результатам операции Rn - 8bit_Imm (8-битное не- посредственное значение) Логические Тестирование битов TST Rn, Rm N, Z, Обновление флагов CPSR по результатам операции Rn AND Rm Логическое И AND Rd, Rm N, Z, Rd:= Rd AND Rm Исключающее ИЛИ EOR Rd, Rm N, Z, Rd:= Rd EOR Rm Логическое ИЛИ ORR Rd, Rm N,Z, Rd:=RdORRm Очистка битов (маскирование) BIC Rd, Rm N,Z Rd:=RdAND NOT Rm Пересылка с по- битной инверсией (NOT) MVN Rd, Rm N, Z, Rd:= NOT Rm Пустая операция NOP R8:= г8 (флаги не изменяются) Команды сдвига/вращения Логический сдвиг влево LSL Rd, Rm, #<5bit_Imm> N, Z,C Rd:= Rm « 5bit_Imm (допустимые сдвиги 0...31. Флаг С изменяется, если сдвиг равен 0) Логический сдвиг влево LSL Rd, Rs N,Z,C Rd:= Rd << Rs[7:0] (флаг С изменяется, если Rs[7:0] = 0) Логический сдвиг вправо LSR Rd, Rm, #<5bit_Imm> N, Z,C Rd:= Rm » 5bit_Imm (допустимые сдвиги 0...31) Логический сдвиг вправо LSR Rd, Rs N, Z,C Rd:= Rd » Rs[7:0] (Флаг С изменяется, если Rs[7:0] = 0) Арифметический сдвиг вправо ASR Rd, Rm, #<5bit_Imm> N,Z,C Rd:= Rm ASR 5bit_Imm (допустимые сдвиги 0...31) Арифметический сдвиг вправо ASR Rd, Rs N, Z,C Rd:= Rd ASR Rs[7:0] (флаг C изменяется, если Rs[7:0] = 0) Циклический сдвиг (вращение) вправо ROR Rd, Rs N, Z,C Rd:= Rd ROR Rs[7:0] (флаг C изменяется, еслй Rs[7:0] = 0) Команды передачи управления Условный переход B{cond} label R15:= label (метка label должна находиться в пределах — 252...+258 байт от текущей ко- манды. Суффикс AL не исполь- зуется) Безусловный переход В label R15:= label (метка label должна находиться в пределах ±2к от текущей команды)
38 Глава 1. Общее описание микроконтроллеров LPC2000 Таблица 1.17. Список команд THUMB (продолжение) Описание Ассемблерная мнемоника Обновле- ние фла- гов Действие Переход с сохра- нением адреса воз- врата в R14 BL label R14:= R15 — 2, R15:= label (кодируется двумя командами THUMB. Метка label должна лежать в пределах ±4М от теку- щей команды) Переход с возмож- ностью смены состояния ВХ Rm R15:= Rm AND OxFFFFFFFE, переход в ARM, если Rm[0]= 0 Команды загрузки из памяти Загрузка слова с непосредствен- ным смещением LDR Rd, [Rn, #<5*4bit_Imm >] Rd:= [Rn + 5*4bit_Imm] Загрузка полуслова с непосредствен- ным смещением LDRH Rd, [Rn, #<5*2bit_Imm >] Rd:= нулевое дополнение ([Rn + 5*2bit_Imm][15:0]) (биты 31:16 сбрасываются) Загрузка байта с непосредствен- ным смещением LDRB Rd, [Rn, #<5bit_Imm >] Rd:= нулевое дополнение ([Rn + 5bit_Imm][7:0]) (биты 31:8 сбрасываются) Загрузка слова с регистровым смещением LDR Rd, [Rn + Rm] Rd:= [Rn + Rm] Загрузка полусло- ва с регистровым смещением LDRH Rd, [Rn + Rm] Rd:= нулевое дополнение ([Rn +Rm][15:0]) (биты 31:16 сбрасываются) Загрузка полуслова со знаком с регист- ровым смещением LDRSH Rd, [Rn + Rm] Rd:= знаковое дополнение ([Rn +Rm][15:0]) (биты 31:16 и 15 устанавливаются) Загрузка байта с регистровым смещением LDRB Rd, [Rn + Rm] Rd:= нулевое дополнение ([Rn +Rm][7:0]) (биты 31:8 сбрасываются) Загрузка байта со знаком с регист- ровым смещением LDRSB Rd, [Rn + Rm] Rd:= знаковое дополнение ([Rn+Rm][7:0]) (биты 31:8 и 7 устанавливаются) Загрузка относи- тельно PC LDR Rd, [PC, #<8*4bit_Imm >] Rd:= [(R15 AND OxFFFFFFFC)+ + 8*4bit_Imm] Загрузка относи- тельно SP LDR Rd, [SP, #<8*4bit_Imm >] Rd:= [R13 + 8*4bit_Imm] Групповая загрузка LDMIA Rn!, <reglist> Загрузка списка регистров (с изменением базового регистра) Команды сохранения в памяти Сохранение слова с непосредствен- ным смещением STR Rd, [Rn, #<5*4bit_Imm >] [Rn + 5*4bit_Imm ]:= Rd Сохранение полу- слова с непосредс- твенным смещением STRH Rd, [Rn, #<5*2bit_lmm >] [Rn + 5*2bit_Imm][15:0]:= Rd[15:0] (игнорируются Rd[31:16]) Сохранение байта с непосредствен- ным смещением STRB Rd, [Rn, #<5bit_Imm >] [Rn + 5bit_Imm][7:0]:= Rd[7:0] (игнорируются Rd[31:8]) Сохранение слова с регистровым смещением STR Rd, [Rn, Rm] [Rn + Rm]:= Rd Сохранение полу- слова с регистро- вым смещением STRH Rd, [Rn, Rm] [Rn + Rm][15:0]:= Rd[15:0] (игнорируются Rd[31:16])
1.4. Процессорное ядро ARM7TDMI-S 39 Таблица 1.17. Список команд THUMB (продолжение) Описание Ассемблерная мнемоника Обновле- ние фла- гов Действие Сохранение байта с регистровым смещением STRB Rd, [Rn, Rm] [Rn + Rm][7:0]:= Rd[7:0] (игнорируются Rd[31:8]) Сохранение слова относительно SP STR Rd, [SP, #<8*4bit_Imm >] [R13 + 8*4bit_Imm]:= Rd Групповое сохранение STMIA Rn!, <reglist> Сохранение списка регистров (с изменением базового регистра) Помещение в стек (PUSH)/ выталкивание из стека (POP) Помещение в стек PUSH <reglist> Помещение регистров в пол- ный убывающий стек Помещение в стек с сохранением адреса возврата PUSH <reglist, LR> Помещение регистров и LR в стек Выталкивание из стека POP <reglist> Выталкивание регистров из стека Выталкивание из стека с возвратом POP <reglist, PC> Выталкивание регистров из стека, переход по адресу, загружаемому в PC Программное пре- рывание SWI <8bit_Imm> Генерация программного прерывания процессора (8-бит- ное значение содержится в коде команды) В отличие от формата ARM, в формате команд THUMB отсутствует поле ус- ловия {cond}. Из условных операций выполняются только команды условных переходов Вхх, где суффикс хх определяет вид условия в соответствии с Табл. 1.5. Не используется также суффикс S, так как в системе команд THUMB жестко задано, какие флаги условий устанавливаются в регистре CPSR по ре- зультатам выполнения той или иной команды. Сокращение длины команд пов- лияло также на размер содержащихся в них операндов. Непосредственные дан- ные сокращены до 8 битов, адресные смещения в большинстве команд — до 5 битов. Однако обрабатываемые данные сохраняют 32-битный формат, как и в состоянии ARM. Состояние THUMB имеет ряд ограничений по системе команд, поэтому один и тот же алгоритм потребует для своей реализации большего количества команд, нежели в состоянии ARM. Однако как уже было сказано, формат ко- манд THUMB обеспечивает большую компактность программного кода, чем формат ARM. При использовании 8- или 16-битной внешней памяти произво- дительность процессора в состоянии THUMB может оказаться выше, чем в со- стоянии ARM, за счет меньшего количества обращений к памяти. 1.4.5. Обработка исключительных ситуаций При поступлении внешнего запроса прерывания или обнаружении ошибки процессор начинает работу в соответствующем данной исключительной ситуа- ции (ИС) режиме: IRQ, FIQ, Abort или Undefinied. При этом соблюдается следу- ющая последовательность действий:
40 Глава 1. Общее описание микроконтроллеров LPC2000 1. Адрес следующей команды автоматически сохраняется в соответствующем регистре LR (R14_xxx). В состоянии ARM в LR копируется адрес следую- щей команды (PC + 4 или PC + 8 в зависимости от ИС). В состоянии THUMB в LR записывается содержимое PC со значением смещения (PC + 4 или PC + 8 в зависимости от ИС). Для обеспечения корректного возврата в основную программу обработчику ИС нет необходимости при входе в обработку исключительной ситуации определять текущее состояние процессора. Например, в случае выполнения команды SWI последующее выполнение команды MOV PC, R14_svc всегда вызовет возврат на следующую после SWI команду вне зависимости от того, была ли команда SWI выполнена в состоянии ARM или THUMB. 2. Содержимое CPSR автоматически копируется в соответствующий регистр SPSR_xxx. 3. Значения битов М4...М0 в CPSR автоматически устанавливаются в соответс- твии с новым режимом работы процессора: IRQ, FIQ, Abort или Undefinied. 4. Из размещенной в памяти таблицы векторов прерываний в программный счетчик PC загружается адрес первой команды обработчика прерывания. При этом могут быть также запрещены (замаскированы) некоторые ИС, чтобы избежать ситуации, когда неуправляемое вложение ИС приводит к нарушению процесса обработки прерываний (см. Табл. 1.18). Таблица 1.18. Вектора исключительных ситуаций ARM7TDMI-S Адрес вектора в памяти Исключительная ситуация Режим Состояние бита I Состояние бита F 0x00000000 Reset Supervisor Замаскирован Замаскирован 0x00000004 Undefined instruction Undefined I F 0x00000008 Software interrupt Supervisor Замаскирован F 0х0000000С Abort (Prefetch) Abort I F 0x00000010 Abort (Data) Abort I F 0x00000014 Зарезервировано Зарезервировано — — 0x00000018 IRQ IRQ Замаскирован F 0х0000001С FIQ FIQ Замаскирован Замаскирован Исключительная ситуация всегда обрабатывается в состоянии ARM. Если ИС генерируется, когда процессор находится в состоянии THUMB, то пере- ключение в состояние ARM производится автоматически в тот момент, когда адрес вектора исключительной ситуации загружается в PC. В системе команд ARM отсутствует специальная команда для выхода из об- работчика прерывания и возврата в основную программу. Для того, чтобы вы- полнить возврат, программный блок обработчика исключительной ситуации должен произвести следующие действия: 1. Восстановить содержимое CPSR из SPSR_xxx. 2. Разрешить прерывания, запрещенные при входе в текущий обработчик. 3. Загрузить в PC адрес возврата из регистра LR с вычитанием смещения с по- мощью команды выхода из соответствующего прерывания.
1.4. Процессорное ядро ARM7TDMI-S 41 Загрузка в PC адреса возврата для каждой исключительной ситуации произ- водится командами, приведенными в Табл. 1.19. При выходе из режимов FIQ, IRQ, Abort необходимо произвести коррекцию адреса возврата. Поскольку пос- ле обработки этих ИС процессор должен вернуться к выполнению команды, вызвавшей прерывание, а в регистре LR хранится адрес следующей команды, то при выходе из обработчика прерываний содержимое этого регистра следует скорректировать с помощью команды вычитания SUBS. Таблица 1.19. Обработка исключительных ситуаций ARM7TDMI-S Исключи- тельная ситуа- ция или вход Команда возврата Предыдущее состояние Примечание ARM R14_xxx THUMB R14-XXX BL MOV PC, R14 PC+ 4 PC+ 2 PC содержит адрес BL, SWI, команды Undefined или ко- манды Prefetch Abort SWI MOV PC, R14_svc PC+ 4 PC+ 2 Неправильная команда (Undefined) MOV PC, R14_und PC+ 4 PC+ 2 Ошибка выбор- ки команды (Prefetch Abort) SUBS PC, R14_abt, #4 PC+ 4 PC+ 4 FIQ SUBS PC, R14_fiq, #4 PC+ 4 PC+ 4 PC содержит адрес команды, которая не была выполне- на, потому что FIQ или IRQ по- лучили приоритет IRQ SUBS PC, R14_irq, #4 PC+ 4 PC+ 4 Ошибка выбор- ки данных (Data Abort) SUBS PC, R14_abt, #8 PC+ 8 PC+ 8 PC содержит адрес команды загрузки или сохранения, которая генериро- вала ошибку вы- борки данных (Data Abort) Сброс (RESET) — — Значение, сохра- няющееся в R14_svc при сбро- се, непредсказуе- мо Ниже, в порядке убывания приоритета, перечислены семь видов ИС, гене- рируемых ядром ARM7TDMI. 1. Reset — генерируется при подаче сигнала запуска (подача и снятие сигнала сброса с активным НИЗКИМ уровнем) на вывод процессора nRESET. Про- цессор переходит в режим Supervisor и начинает выполнение программы с адреса памяти 0x00000000. 2. Data Abort — ошибка при обращении к данным (фиксируется контроллером прерываний, который вырабатывает сигнал активного уровня на выводе про- цессора ABORT). Процессор переходит в режим Abort. При возникновении исключительной ситуации Data Abort, соответствующие действия ядра зави- сят от выполняемой в данный момент команды и могут быть следующими:
42 Глава 1. Общее описание микроконтроллеров LPC2000 • Команды индивидуального перемещения данных (LDR, STR) записыва- ют назад модифицированные базовые регистры. Обработчик Data Abort должен учитывать это. • Команда обмена (SWP) прерывается, не будучи выполненной до конца. (Это произойдет в случае, если исключительная ситуация Data Abort воз- никла в момент доступа для чтения команды SWP.) • Команды группового перемещения данных (LDM, STM) завершаются. Когда запись оканчивается, базовый регистр команды модифицируется. Если команда производит перезапись базового регистра «поверх» его мо- дифицированного содержимого (базовый регистр находится в списке пе- ремещаемых регистров команды), ядро ARM7TDMI-S предотвращает перезапись. • Ядро ARM7TDMI-S предотвращает перезапись всех регистров «поверх» их содержимого, измененного текущей командой, после того, как воз- никла исключительная ситуация Data Abort. Это означает, что ядро всегда сохраняет R15 (последний из перемещаемых регистров) в прерванной ко- манде LDM. 3. FIQ — генерируется при подаче сигнала прерывания на один из выводов nFIQ процессора. Процессор переходит в режим FIQ. При поступлении данного прерывания, в регистровом банке происходит переключение с ре- гистров R8...R14 на регистры R8_fiq...R14_fiq, что позволяет сократить или исключить операции сохранения содержимого регистров в стеке и за счет этого обеспечить наименьшее время реакции на прерывание. 4. IRQ — возникает при подаче сигнала прерывания на один из выводов nIRQ процессора. Процессор переходит в режим IRQ. Прерывания FIQ имеют бо- лее высокий приоритет по отношению к прерываниям IRQ. 5. Prefetch Abort — ошибка при выборке команды (фиксируется контроллером прерываний). Ядро отмечает предварительно выбранную команду как недо- пустимую, но не генерирует ИС, пока команда не достигает в конвейере ста- дии выполнения. Если эта команда находится в конвейере, но не выполня- ется (поскольку ей предшествует команда перехода), то исключительная ситуация Prefetch Abort не возникает. При возникновении исключительной ситуации Prefetch Abort процессор переходит в режим Abort. 6. Undefined instruction — выборка неправильного кода команды. Когда про- цессор сталкивается с командой, которую ни он, ни какой-либо из сопро- цессоров в системе не могут обработать, ядро переходит в режим Undefined. Процессор ARM7TDMI-S, соответствующий архитектуре ARM v4T, генери- рует ИС Undefined instruction для всех команд, которые классифицирует как неопределенные. Следует заметить, что опытные программисты могут за- действовать этот механизм для того, чтобы включить в систему команд ARM дополнительные пользовательские команды. 7. Software interrupt — программное прерывание по команде SWI. Процессор переходит в режим Supervisor. Программные прерывания используются, как правило, для вызова функций ОС. Вектора прерываний располагаются в памяти последовательно, начиная с ад- реса 0x00000000 (вектор Reset), как показано в Табл. 1.18. Каждый вектор содержит 4 байта — адреса первой команды соответствующего обработчика прерывания;
1.4. Процессорное ядро ARM7TDMI-S 43 Следует заметить, что в Ткбл. 1.18 отсутствуют вектора прерываний по за- просам внешних устройств. Дело в том, что микроконтроллеры, реализуемые на базе ядра ARM7TDMI-S, как правило, имеют довольно значительное количест- во периферийных устройств, поэтому в состав микроконтроллера входит спе- циальный контроллер прерываний, задачей которого является трансляция за- проса от любого периферийного устройства в запрос IRQ или FIQ. После такой трансляции программа-обработчик должна самостоятельно определить источ- ник запроса, используя регистры контроллера прерываний. Исключительные ситуации Undefined instruction и SWI являются взаимоис- ключающими. Когда декодирована команда SWI, исключительная ситуация Undefined instruction не может быть сгенерирована, и наоборот. Если разрешенное прерывание FIQ и прерывание Data Abort возникают од- новременно, ядро ARM7TDMI-S сначала запускает обработчик ИС Data Abort, а затем немедленно передает управление на вектор FIQ. После нормального воз- вращения из FIQ управление вновь передается обработчику Data Abort. Такой по- рядок действий установлен для того, чтобы обеспечить прерыванию Data Abort более высокий приоритет, чем любым прерываниям FIQ. Что, в свою очередь, га- рантирует, что ошибка перемещения данных всегда будет обнаружена системой. Таким образом, разработчик (программист) должен прибавлять к ожидаемому времени реакции FIQ время, необходимое на запуск обработчика Data Abort. 1.4.6. Время реакции на прерывания Время реакции на прерывания в микропроцессорной системе критично, как правило, только для быстрых прерываний FIQ. Значение времени реакции лежит в некотором возможном диапазоне, т. е. может быть максимальным и минимальным. Когда прерывания FIQ разрешены, максимальное время реак- ции на FIQ (для самого «плохого» случая) складывается из: • Tsyncmax — наиболее длительное время запроса, которое может потребо- ваться на реакцию синхронизатора. Это время составляет два процессор- ных цикла; • Tidm — время, требующееся для завершения самой длинной команды. (Самая длинная команда — LDM, которая загружает все регистры, вклю- чая PC.) Tldm равно 20 процессорным циклам в системе с нулевым време- нем ожидания; • Техс — время входа в обработчик Data Abort. Оно составляет три процес- сорных цикла; • Tfiq — время входа в обработчик FIQ. Оно составляет два процессорных цикла. Таким образом, полное время ожидания для самого «плохого» случая со- ставляет 27 циклов процессора, что немного меньше 0.7 мкс в системе с такто- вой частотой процессора 40 МГц. При вычислении максимального времени ожидания IRQ необходимо учи- тывать то обстоятельство, что обработка прерываний FIQ, имеющих приоритет выше, чем у IRQ, может задержать вход в обработчик IRQ. Минимальное время ожидания для FIQ или IRQ — это кратчайшее время запроса, которое может потребоваться на реакцию синхронизатора Tsyncmin, сло- женное со временем Tfiq, что в сумме составляет четыре процессорных цикла.
44 Глава 1. Общее описание микроконтроллеров LPC2000 1.5. Flash-память на кристалле Размещенная на кристалле LPC2000 встроенная Flash-память обеспечивает доступ с практически нулевым временем ожидания благодаря наличию встро- енного модуля акселератора памяти (Memory Accelerator Module — МАМ). Flash-память LPC2000 может использоваться как для хранения программ, так и для хранения данных. В большинстве устройств LPC2000 она имеет защиту от записи/чтения. Программирование Flash-памяти может производиться не- сколькими способами: через последовательный встроенный интерфейс JTAG, внутрисхемно — In System Programming (ISP) через встроенный интерфейс UART0, а также из приложения пользователя — In Application Programming (IAP). Пользовательская прикладная программа, используя механизм IAP, мо- жет стирать или программировать Flash-память в ходе своего выполнения, что обеспечивает возможность обновления данных и встроенного программного обеспечения по инициативе самого встроенного программного обеспечения. 1.6. Статическое ОЗУ на кристалле Микроконтроллеры семейства LPC2000 имеют встроенную статическую оперативную память (SRAM) размером 16...64 Кбайт, которая может использо- ваться для хранения кода и/или данных. SRAM может хранить 8-, 16- и 32-бит- ные данные. Содержимое SRAM при сбросе микроконтроллера сохраняется. Контрол- лер SRAM имеет в своем составе буфер отложенной записи, служащий для обеспечения работы центрального процессора без его остановов на время запи- си в SRAM. В буфере отложенной записи всегда содержатся последние данные, переданные пользовательской программой для записи в SRAM. Содержимое буфера реально записывается в SRAM, когда пользовательская программа передает в буфер следующую порцию данных, предназначенных для помещения в SRAM. Если в некоторый момент времени происходит сброс мик- роконтроллера, то последняя помещенная в буфер отложенной записи порция данных будет потеряна. Во избежание этого, а также перед переводом микро- контроллера в режим пониженного потребления пользовательское програм- мное обеспечение может периодически производить фиктивную операцию за- писи. Это даст гарантию того, что последние записанные данные будут нахо- диться в SRAM и после сброса. 1.7. Специальные регистры микроконтроллера Специальные регистры микроконтроллера предназначены для обеспечения использования его ресурсов и программного управления этими ресурсами. Механизм доступа к специальным регистрам устройств семейства LPC2000 имеет следующие установленные производителем ограничения: 1. Пользовательская программа не должна пытаться обращаться к регистрам, местоположение которых не определено. 2. Обращение к любым регистрам, местоположение которых определено, должно иметь целью только реализацию установленных производителем функций этих регистров.
1.8. Блок-схемы микроконтроллеров LPC2000 45 3. Биты регистров, маркированные в документации символами «-», «О» или «1» могут читаться или записываться программой только следующим образом: • в бит, маркированный символом «-», следует записывать «О», а его чтение может возвращать любое значение (даже если ранее было записано «О»). Этот бит является зарезервированным для использования в перспективных микроконтроллерах, а в данном микроконтроллере он не используется; • в бит, маркированный символом «О», следует записывать «О», а его чтение также возвращает «О»; • в бит, маркированный символом «1», следует записывать «1», а его чтение также возвращает «1». Специальные регистры микроконтроллеров LPC2000 могут быть доступны для чтения и записи, только для чтения или только для записи. В графе «До- ступ» приведенных ниже таблиц с описаниями специальных регистров имеют- ся соответствующие обозначения R/W, RO, WO. Значения, указанные в графе таблиц «Значение после сброса», относятся к данным, содержащимся только в используемых (доступных программе) битах. К ним не относятся зарезервированные биты. Некоторые регистры микроконт- роллера могут содержать после сброса неопределенные значения. В этом случае в графе таблиц «Значение после сброса» указано «неопределенное». В случае, если данный регистр не используется, в графе «Значение после сброса» указано «NA». Содержимое некоторых регистров в модуле таймера реального времени (RTC) LPC2000 сброс не затрагивает. Значение таких регистров отмечено зна- ком «*», а сами эти регистры должны быть инициализированы пользователь- ским программным обеспечением, если модуль RTC включен. Регистры в LPC2000 могут быть 8-, 16- или 32-битными. Для 8-битных ре- гистров старший значащий бит (или MSB — Most Significant Bit) — это бит 7, а младший значащий бит (или LSB — Least Significant Bit) — бит 0. Для 16- и 32- битных регистров старший значащий бит — это биты 15 и 31 соответственно. Необходимо заметить, что в различных микроконтроллерах LPC2000 спе- циальные регистры, имеющие одинаковые функции и одинаковые мнемони- ческие имена, имеют и одинаковые адреса. Сводная таблица, содержащая пере- числение всех специальных регистров всех микроконтроллеров LPC2000, не включена в состав данной книги, поскольку такая таблица заняла бы очень много места. Информация о специальных регистрах, обеспечивающих функци- онирование отдельных модулей LPC2000, приводится в разделах, посвященных описанию этих модулей. 1.8. Блок-схемы микроконтроллеров LPC2000 Блок-схема микроконтроллеров LPC2101/02/03 изображена на Рис. 1.5, мик- роконтроллеров LPC2104/05/06 — на Рис. 1.6, микроконтроллеров LPC2114/24 и LPC2212/14 - на Рис. 1.7, микроконтроллеров LPC2119/29/94 и LPC2292/94 - на Рис. 1.8, микроконтроллеров LPC2131/32/34/36/38 — на Рис. 1.9, микроконт- роллеров LPC2141/42/44/46/48 — на Рис. 1.10, микроконтроллеров LPC2210/20 — на Рис. 1.11 и микроконтроллера LPC2290 — на Рис. 1.12.
46 Глава 1. Общее описание микроконтроллеров LPC2000 1) Эти линии могут использоваться как линии GPIO. Рис, 1,5, Блок-схема микроконтроллеров LPC2101/02/03
1.8. Блок-схемы микроконтроллеров LPC2000 47 1) Когда используется интерфейс тестирования/отладки, функция GPIO для этих линий недоступна. 2> Эти линии могут использоваться как линии GPIO. Рис. 1.6. Блок-схема микроконтроллеров LPC2104/05/06
48 Глава 1. Общее описание микроконтроллеров LPC2000 1) Когда используется интерфейс тестирования/отладки, функция GPIO для этих линий недоступна. 2> Эти линии могут использоваться как линии GPIO. 3) Имеется только в микроконтроллерах LPC2212/2214. Рис. 1.7. Блок-схема микроконтроллеров LPC2114/24 и LPC2212/14
1.8. Блок-схемы микроконтроллеров LPC2000 49 1) Когда используется интерфейс тестирования/отладки, функция GPIO для этих линий недоступна. 2> Имеется только в LPC2292/94. 3> Эти линии могут использоваться как линии GPIO. 4) Имеется только в LPC2194 и LPC2292/94. 5> Имеется только в LPC2294. 304 Рис. 1.8. Блок-схема микроконтроллеров LPC2119/29/94 и LPC2292/94
50 Глава 1. Общее описание микроконтроллеров LPC2000 1> Имеется только в LPC2134/36/38. 2) Имеется только в LPC2132/34/36/38. 3> Когда используется интерфейс тестирования/отладки, функция GPIO для этих линий недоступна. Рис. 1.9. Блок-схема микроконтроллеров LPC2131/32/34/36/38
1.8. Блок-схемы микроконтроллеров LPC2000 51 1> Эти линии могут использоваться как линии GPIO. 2> Имеется только в микроконтроллерах LPC2144/46/48. 3> Контроллеру USB доступно для DMA 8К SRAM общего назначения, а режим DMA доступен только в LPC2146/48. 4> Имеется только в микроконтроллерах LPC2142/44/46/48. Рис. 1.10. Блок-схема микроконтроллеров LPC2141/42/44/46/48
52 Глава 1. Общее описание микроконтроллеров LPC2000 1) Когда используется интерфейс тестирования/отладки, функция GPIO для этих линий недоступна. 2) в микроконтроллере LPC2220 имеются три модуля SPI. 3) Эти линии могут использоваться как линии GPIO. Рис. 1.11. Блок-схема микроконтроллеров LPC2210/20
1.8. Блок-схемы микроконтроллеров LPC2000 53 1) Когда используется интерфейс тестирования/отладки, функция GPIO для этих линий недоступна. 2) Эти линии могут использоваться как линии GPIO. Рис. 1.12. Блок-схема микроконтроллера LPC2290
ГЛАВА 2 ОРГАНИЗАЦИЯ СИСТЕМНОЙ ПАМЯТИ В этой главе описаны структура и принципы организации встроенной Flash-памяти микроконтроллеров семейства LPC2000. При рассмотрении па- мяти микроконтроллеров производитель оперирует понятиями «карта памяти» и «переотображение памяти». Под картой памяти здесь понимается блочная диаграмма, графически изображающая адресное пространство некоторой адре- суемой памяти. Под переотображением памяти понимается заложенная произ- водителем в микроконтроллеры семейства LPC2000 возможность автоматичес- кой аппаратной перекодировки адресов памяти в командах процессора при осуществлении доступа к определенным ее областям. В результате такой пере- кодировки, при попытке программы осуществить доступ к некоторой области памяти производится физический доступ к другой области памяти, на которую «переотображена» требуемая область. 2.1. Массив системной памяти Встроенная память микроконтроллеров семейства LPC2000 поделена на не- сколько областей. На Рис. 2.1 изображена карта всей системной памяти микрокон- троллеров LPC2101/02/03, доступной пользовательской программе после сброса. Карта всей системной памяти микроконтроллеров LPC2104/05/06 изображена на Рис. 2.2, микроконтроллеров LPC2114/24 и LPC2212/14 — на Рис. 2.3, микроконт- роллеров LPC2119/29/94 и LPC2292/94 — на Рис. 2.4, микроконтроллеров LPC2131/32/34/36/38 - на Рис. 2.5, микроконтроллеров LPC2141/42/44/46/48 - на Рис. 2.6, микроконтроллеров LPC2210/20 — на Рис. 2.7 и микроконтроллера LPC2290 — на Рис. 2.8. Область векторов прерываний, которая может быть переотображена на под- держивающие такое переотображение области адресов, будет описана ниже. На Рис. 2.9 изображена карта периферийной памяти микроконтроллеров LPC2000. К периферийной памяти относятся периферийные области АНВ и VPB, размером по 2 Мбайт. Каждая из них разделена на 128 областей перифе- рийных устройств. Таким образом, каждому периферийному устройству отведе- на область памяти размером 16 Кбайт, что упрощает дешифрацию адреса для соответствующего периферийного устройства. Карта периферийной памяти области АНВ микроконтроллеров LPC2000 изображена на Рис. 2.10. Базовые адреса VPB-устройств микроконтроллеров LPC2101/02/03 приведе- ны в Табл. 2.1, микроконтроллеров LPC2104/05/06 — в Табл. 2.2, микроконтрол- леров LPC2114/24/19/29/94 и LPC2212/14/92/94 — в Табл. 2.3, микроконтролле- ров LPC2131/32/34/36/38 - в Табл. 2.4, микроконтроллеров LPC2141/42/44/46/48 — в Табл. 2.5, микроконтроллеров LPC2210/20 — в Табл. 2.6.
2.1. Массив системной памяти 55 4.0Г АНВ-периферия OxFFFF FFFF ЛуРЛЛЛ лллл О. / UI VPB-периферия ихгиии ииии ЛуРЛЛЛ лллл 0.UI ихьиии ииии з.ог 2.0Г Резервное пространство адресов 0хС000 0000 ЛуЯЛЛЛ лллл Загрузочный блок ихоиии ииии 0X7FFFE000 Резервное пространство адресов 0x7FFF DFFF 0x4000 2000 8К встроенной SRAM (LPC2103) 0x4000 1FFF 0x4000 1000 4К встроенной SRAM (LPC2102) 0x4000 OFFF 0x4000 0800 1.0Г • 2К встроенной SRAM (LPC2101) 0x4000 07FF 0x40000000 0x0000 8000 Резервное пространство адресов 32К встроенной энергонезависимой памяти (LPC2103) 0x0000 7FFF 0x00004000 16К встроенной энергонезависимой памяти (LPC2102) ОхОООО 3FFF 0x00002000 о.ог 8К встроенной энергонезависимой памяти (LPC2101) 0x0000 1FFF 0x00000000 4.0Г О 7РГ АНВ-периферия OxFFFF FFFF ЛуРПЛЛ ПОЛЛ О. / Э1 ихгиии ииии 3.5Г VPB-периферия ОхЕООООООО З.ОГ ОхСООООООО 2.0Г Зарезервировано для внешней памяти 0x80000000 Загрузочный блок (переотображен на встроенную Flash-память) OX7FFFEOOO 0x7FFF DFFF Зарезервировано для встроенной памяти 0x4000 FFFF 64К встроенной SRAM (LPC2106) 0x40008000 0x4000 7FFF 32К встроенной SRAM (LPC2105) 0x40004000 0x4000 3FFF 1 лг 16К встроенной SRAM (LPC2104) ЛуЛЛЛЛ лллл I .UI UXhUUU UUUU Резервное пространство адресов 0x00020000 о.ог 128К встроенной энергонезависимой памяти 0x0001 FFFF 0x00000000 Рис. 2.1. Карта всей системной памяти микроконтроллеров LPC2101/02/03 Рис. 2.2. Карта всей системной памяти микроконтроллеров LPC2104/05/06 4.0Г О 7КГ АНВ-периферия OxFFFF FFFF ЛуСЛЛЛ лллл O> /Dl UXrUUU ииии О РГ VPB-периферия ЛуРЛЛЛ лллл o.OI ихсиии ииии 3.0Г В Ml ОхСООООООО О ЛГ Зарезервировано для внешней памяти 0x80000000 Z.UI Загрузочный блок (переотображен на встроенную Flash-память) 0x7FFFE000 0x7FFF DFFF Зарезервировано для встроенной памяти 0x4000 3FFF 1 ЛГ 16К встроенной SRAM 0x40000000 I .UI Резервное пространство адресов 0x00040000 256К встроенной энергонезависимой 0x0003 FFFF памяти (LPC2212/2214) 0x00020000 128К встроенной энергонезависимой 0x0001 FFFF о.ог памяти (LPC2114/2124) 0x00000000 4.0Г О 7СГ АНВ-периферия OxFFFF FFFF Л v ел л л лллл 0. / Ol ихгиии ииии о РГ VPB-периферия ЛуРЛЛЛ лллл O.OI UaCUvv vUvv 3.0Г ОхСООООООО о лг Зарезервировано для внешней памяти 0x80000000 £.UI Загрузочный блок (переотображен на встроенную Flash-память) 0x7FFF Е000 0x7FFF DFFF Зарезервировано для встроенной памяти 1 Лг 16К встроенной SRAM 0x4000 3FFF 0x40000000 1 .UI 0x00040000 256К встроенной энергонезависимой 0x0003 FFFF памяти (LPC2129/2194/2292/2294) 0x00020000 О.ОГ 128К встроенной энергонезависимой памяти (LPC2119). 0x0001 FFFF 0x00000000 Рис. 2.4. Карта всей системной памяти микро- контроллеров LPC2119/29/94 и LPC2292/94 Рис. 2.3. Карта всей системной памяти микро- контроллеров LPC2114/24 и LPC2212/14
56 Глава 2. Организация системной памяти 4.0Г 3.75Г 3.5Г АНВ-периферия OxFFFF FFFF Ач/ЕЛЛЛ АЛЛА VPB-периферия UXrUUU ииии AvCAAA ЛАЛА UXtUUU ииии З.ОГ 2.0Г Резервное пространство адресов ОхСООООООО AvQfiAA ЛААА Загрузочный блок (переотображен на встроенную Flash-память) UXoUUU ииии 0x7FFFE000 0x7FFF DFFF Резервное пространство адресов 0x4000 8000 32К встроенной SRAM (LPC2138) 0x4000 7FFF 0x40004000 16К встроенной SRAM (LPC2132) 0x4000 3FFF 0x40002000 1.0Г х 8К встроенной SRAM (LPC2131) 0x4000 1FFF Av/ЛЛЛ ЛЛЛЛ Резервное пространство адресов UX4UUU UUUU 0x0008 0000 512К встроенной энергонезависимой памяти (LPC2138) 0x0007 FFFF 0x0001 0000 64К встроенной энергонезависимой памяти (LPC2132) 0x0000 3FFF 0x0000 8000 О.ОГ 32К встроенной энергонезависимой памяти (LPC2131) 0x0000 7FFF 0x00000000 4.0Г 3.75Г 3.5Г АНВ-периферия OxFFFF FFFF Лх/СЛЛЛ ЛЛЛЛ VPB-периферия UXrUUU ииии HvEAAA ЛЛЛЛ UXtUUU ииии З.ОГ 2.0Г _ Резервное пространство адресов ОхСООООООО AvQAAA ЛЛЛЛ Загрузочный блок (переотображен на встроенную Flash-память) UXoUUU ииии 0x7FFF Е000 Резервное пространство адресов 0X7FFFCFFF 0x4000 2000 8К встроенной RAM USB DMA (LPC2146/2148) 0x4000 1FFF 0X7FD00000 Резервное пространство адресов 0x7FCF FFFF 0x4000 8000 32К встроенной SRAM (LPC2146/2148) 0x4000 7FFF 0x40004000 16К встроенной SRAM (LPC2142/2144) 0x4000 3FFF 0x40002000 1 лг 8К встроенной SRAM (LPC2141) 0x4000 1FFF 0x40000000 1 .UI Резервное пространство адресов 0x3FFF FFFF 0x00080000 512К встроенной энергонезависимой памяти (LPC2148) 0x0007 FFFF 0x00040000 256К встроенной энергонезависимой памяти (LPC2146) 0x0003 FFFF 0x00020000 128К встроенной энергонезависимой памяти (LPC2144) 0x0001 FFFF 0x0001 0000 64К встроенной энергонезависимой памяти (LPC2142) 0x0000 FFFF 0x00008000 о.ог 32К встроенной энергонезависимой памяти (LPC2141) 0x0000 7FFF 0x00000000 Рис. 2.5. Карта всей системной памяти микроконтроллеров LPC2131/32/34/36/38 Рис. 2.6. Карта всей системной памяти микроконтроллеров LPC2141/42/44/46/48 4.0Г OxFFFF FFFF 3.75Г АНВ-периферия OxFOOOOOOO HvCXEC ЕЕЕЕ VPB-периферия UXtrrr ГГГГ OxEOOOOOOO O.Oi 3.0Г- Резервное пространство адресов OxDFFF FFFF 0x84000000 Банк 3 внешней памяти 0x83FF FFFF 0x83000000 Банк 2 внешней памяти 0x82FF FFFF 0x82000000 Банк 1 внешней памяти 0x81FF FFFF 0x81000000 2.0Г Банк 0 внешней памяти 0x80FF FFFF 0x80000000 Загрузочный блок (переотображен на встроенную Flash-память) 0x7FFF FFFF OX7FFFEOOO Резервное пространство адресов 0x7FFF DFFF 0x4001 0000 64К встроенной SRAM (LPC2220) 0x4000 FFFF 0x40004000 1 ЛГ 16К встроенной SRAM (LPC2210) 0x4000 3FFF 0x40000000 1 .UI о.ог Резервное пространство адресов 0x3FFF FFFF 0x00000000 4.0Г о 7КГ АНВ-периферия OxFFFF FFFF OxFOOOOOOO O. /Ol о КГ VPB-периферия OxEFFF FFFF OxEOOOOOOO u.DI OxDFFF FFFF 3.0Г- Резервное пространство адресов 0x84000000 Банк 3 внешней памяти 0x83FF FFFF 0x83000000 Банк 2 внешней памяти 0x82FF FFFF 0x8200 0000 Банк 1 внешней памяти 0x81FF FFFF 0x81000000 2.0Г Банк 0 внешней памяти 0x80FF FFFF 0x8000 0000 Загрузочный блок (переотображен на встроенную Flash-память) 0x7FFF FFFF 0x7FFF E000 0x7FFF DFFF Резервное пространство адресов 0x4001 0000 1 лг 16К встроенной SRAM 0x4000 3FFF 0x40000000 I .UI 0x3FFF FFFF о.ог Резервное пространство адресов 0x00000000 Рис. 2.7. Карта всей системной памяти микроконтроллеров LPC2210/20 Рис. 2.8. Карта всей системной памяти микроконтроллера LPC2290
2.1. Массив системной памяти 57 OxFFFF FFFF ОхЕООООООО 0x40000000 0x3FFF FFFF OxFFEOOOOO OxEFDF FFFF OxFOOOOOOO OxEFFF FFFF Примечания: 1. АНВ секция состоит из 128 блоков по 16К (всего 2М). 2. VPB секция состоит из 128 блоков по 16К (всего 2М). Рис. 2.9. Карта периферийной памяти микроконтроллеров LPC2000 Контроллер векторов прерываний (АНВ-периферия #126) (АНВ-периферия #125) (АНВ-периферия #124) (АНВ-периферия #3) (АНВ-периферия #2) (АНВ-периферия #1) (АНВ-периферия #0) OxFFFF F000(4r-4K) OxFFFF С000 OxFFFF 8000 OxFFFF 4000 OxFFFF 0000 OxFFEI 0000 OxFFEOCOOO 0xFFE0800O OxFFE04000 ОхЕООООООО Рис. 2.10. Карта периферийной памяти АНВ микроконтроллеров LPC2000 Все адресные регистры периферии представляют собой выровненные до 32-х битов слова вне зависимости от реального размера каждого из этих регис- тров. При таком подходе, в программе не требуется явно указывать, каков ре- альный размер регистра (байт или 16-битное полуслово), соответствующего тому или иному аппаратному средству. Обращение производится к 32-битно- му слову, причем без указания на то, как именно требуемые байт или 16-бит- ное полуслово в нем размещены (подразумевается, что это размещение внутри 32-битного слова уже произведено должным образом). Следует учесть, что в этом случае пользовательская программа не может читать или записывать старший байт регистра отдельно от остальных байтов 32-битного слова. Таблица 2.1. Базовые адреса VPB-устройств микроконтроллеров LPC2101/02/03 VPB- периферия Базовый адрес Периферийное устройство VPB- периферия Базовый адрес Периферийное устройство 0 ОхЕООО 0000 Сторожевой таймер 13 ОхЕООЗ 4000 ADC 1 0хЕ000 4000 Таймер 0 14...22 ОхЕООЗ 8000 0хЕ005 8000 Не используется 2 ОхЕООО 8000 Таймер 1 3 ОхЕООО С000 UART0 23 0хЕ005 С000 12С1 4 OxEOOl 0000 UART1 24 ОхЕООб 0000 Не используется 5 OxEOOl 4000 Не используется 25 ОхЕООб 4000 Не используется 6 OxEOOl 8000 Не используется 26 ОхЕООб 8000 SSP 7 OxEOOl C000 12С0 27 ОхЕООб С000 Не используется 8 0xE002 0000 SPIO 28 0хЕ007 0000 Таймер 3 9 0xE002 4000 RTC 29 0хЕ007 4000 Таймер 4 10 0xE002 8000 GPIO 30... 126 0хЕ007 8000 OxEOlF 8000 Не используется 11 0xE002 C000 Блок коммутации выводов 127 0xE01FC000 Блок управления системой 12 ОхЕООЗ 0000 Не используется
58 Глава 2. Организация системной памяти Таблица 2.2. Базовые адреса VPB-устройств микроконтроллеров LPC2104/05/06 VPB- периферия Базовый адрес Периферийное устройство VPB- периферия Базовый адрес Периферийное устройство 0 ОхЕООО 0000 Сторожевой таймер 8 0хЕ002 0000 SPI 1 ОхЕООО 4000 Таймер 0 9 0хЕ0024000 RTC 2 ОхЕООО 8000 Таймер 1 10 0хЕ002 8000 GPIO 3 ОхЕООО С000 UART0 11 0хЕ002 С000 Блок коммутации выводов 4 OxEOOl 0000 UART1 5 OxEOOl 4000 PWM0 12... 126 ОхЕООЗ 0000 0xE0JF8000 Не используется 6 OxEOOl 8000 Не используется 127 OxEOlFCOOO Блок управления системой 7 OxEOOl C000 12С Таблица 2.3. Базовые адреса VPB-устройств микроконтроллеров LPC2114/24/19/29/94 и LPC2212/14/92/94 VPB- периферия Базовый адрес Периферийное устройство VPB- периферия Базовый адрес Периферийное устройство 0 ОхЕООО 0000 Сторожевой таймер 9 0хЕ0024000 RTC 1 ОхЕООО 4000 Таймер 0 10 0хЕ002 8000 GPIO 2 ОхЕООО 8000 Таймер 1 11 0хЕ002 С000 Блок коммутации выводов 3 ОхЕООО С000 UART0 4 OxEOOl 0000 UART1 12 ОхЕООЗ 0000 SPI1 5 OxEOOl 4000 PWM0 13 ОхЕООЗ 4000 ADC 6 OxEOOl 8000 Не используется 14... 126 ОхЕООЗ 8000 0xE01F8000 Не используется 7 OxEOOl C000 12С 127 OxEOlFCOOO Блок управления системой 8 0xE002 0000 SPIO Таблица 2.4. Базовые адреса VPB-устройств микроконтроллеров LPC2131/32/34/36/38 VPB- периферия Базовый адрес Периферийное устройство VPB- периферия Базовый адрес Периферийное устройство 0 ОхЕООО 0000 Сторожевой таймер 12 ОхЕООЗ 0000 Не используется 1 ОхЕООО 4000 Таймер 0 13 ОхЕООЗ 4000 ADC0 2 ОхЕООО 8000 Таймер 1 14...22 ОхЕООЗ 8000 ОхЕООЗ 8000 Не используется 3 ОхЕООО С000 UART0 4 OxEOOl 0000 UART1 23 ОхЕООЗ СООО 12С1 5 OxEOOl 4000 PWM 24 ОхЕООб 0000 ADC1 6 OxEOOl 8000 Не используется 25 ОхЕООб 4000 Не используется 7 OxEOOl C000 12С0 26 ОхЕООб 8000 SSP 8 0xE002 0000 SPIO 27 ОхЕООб С000 DAC 9 0xE002 4000 RTC 28...126 ОхЕ007 0000 OxEOlF 8000 Не используется 10 0xE002 8000 GPIO 11 0xE002 C000 Блок коммутации выводов 127 OxEOlFCOOO Блок управления системой
2.2, Карта памяти и операционные режимы 59 Таблица 2.5. Базовые адреса VPB-устройств микроконтроллеров LPC2141/42/44/46/48 VPB- периферия Базовый адрес Периферийное устройство VPB- периферия Базовый адрес Периферийное устройство 0 ОхЕООО 0000 Сторожевой таймер 13 ОхЕООЗ 4000 ADC0 1 ОхЕООО 4000 Таймер 0 14...22 ОхЕООЗ 8000 0хЕ005 8000 Не используется 2 ОхЕООО 8000 Таймер 1 3 ОхЕООО С000 UART0 23 0хЕ005 С000 12С1 4 OxEOOl 0000 UART1 24 ОхЕООб 0000 ADC1 5 OxEOOl 4000 PWM 25 ОхЕООб 4000 Не используется 6 OxEOOl 8000 Не используется 26 ОхЕООб 8000 SSP 7 OxEOOl C000 12С0 27 ОхЕООб С000 DAC 8 0xE002 0000 SPI0 28...35 0хЕ007 0000 0хЕ008 С000 Не используется 9 0xE002 4000 RTC 36 0хЕ009 0000 USB 10 0xE002 8000 GPIO 37...126 0хЕ009 4000 OxEOlF 8000 Не используется 11 0xE002 C000 Блок коммутации выводов 127 OxEOlF С000 Блок управления системой 12 ОхЕООЗ 0000 Не используется Таблица 2.6. Базовые адреса VPB-устройств микроконтроллеров LPC2210/20 VPB- периферия Базовый адрес Периферийное устройство VPB- периферия Базовый адрес Периферийное устройство 0 ОхЕООО 0000 Сторожевой таймер 10 0хЕ002 8000 GPIO 1 ОхЕООО 4000 Таймер 0 11 0хЕ002 С000 Блок коммутации выводов 2 ОхЕООО 8000 Таймер 1 12 ОхЕООЗ 0000 SPI1 3 ОхЕООО С000 UART0 13 ОхЕООЗ 4000 ADC 4 OxEOOl 0000 UART1 14...25 ОхЕООЗ 8000 ОхЕООб 4000 Не используется 5 OxEOOl 4000 PWM 6 OxEOOl 8000 Не используется 26 ОхЕООб 8000 SSP 7 OxEOOl C000 12С 27...126 ОхЕООб С000 OxEOlF 8000 Не используется 8 0xE002 0000 SPIO 127 OxEOlF С000 Блок управления системой 9 0xE002 4000 RTC 2.2. Карта памяти и операционные режимы Суть концепции построения памяти микроконтроллеров семейства LPCxxx состоит в следующем: каждая область памяти микроконтроллера име- ет свое «естественное», раз и навсегда заданное местоположение в карте памя- ти. Это фиксированное местоположение представляет собой адресный интер- вал, для которого пишется программный код, «привязанный» к выбранной об- ласти. Объем каждой такой области памяти всегда постоянен. Таким образом, пользователю не нужно писать программный код так, чтобы он мог работать сразу в нескольких различных областях памяти. Для того, чтобы создать аль- тернативу использованию прерываний в описанных в Табл. 2.7 различных one-
60 Глава 2. Организация системной памяти рационных режимах микроконтроллера, местоположение области векторов исключительных ситуаций процессора ARM7 (адреса от 0x0000 0000 до 0x0000 001 С, как показано в Табл. 2.8), может быть программно переотображено (ско- пировано) на небольшую часть загрузочного блока или на небольшую часть пространства SRAM. Местоположение самого загрузочного блока также мо- жет быть переотображено. Переотображение векторной области прерываний осуществляется с помощью механизма управления памятью микроконтролле- ров LPC2000 (этот механизм будет описан ниже в главе 4 «Блок управления системой»). Переотображение загрузочного блока из встроенной Flash-памяти в область старших адресов внешней памяти осуществляется способом, указан- ным в Табл. 2.7 (см. «режим внешнего пользователя»). Таблица 2.7. Режимы управления памятью микроконтроллеров семейства LPC2000 Режим Способ активации Использование Режим загрузчика Аппаратная ак- тивация после любого сброса Загрузчик всегда выполняется после любого сброса. Векто- ры прерывания загрузочного блока переотображены на на- чало памяти, чтобы разрешать обработку ИС и использо- вать прерывания в ходе процесса начальной загрузки Режим програм- мирования поль- зователем (про- граммы пользователя) Программная активация загру- зочным кодом Активизируется загрузчиком, когда сигнатура «правильной» пользовательской программы распознана в памяти и поэто- му операция загрузки не вызывается. Векторы прерывания не переотображены и находятся в начале Flash-памяти Режим пользова- тельской опера- тивной памяти Программная активация поль- зовательской программой Активируется пользовательской программой. Векторы пре- рывания переотображены на начало статической оператив- ной памяти SRAM Режим внешнего пользователя На выводах BOOT 1:0 нет уровней «11» при сбросе Активируется загрузчиком, когда на одном или обоих выво- дах BOOT присутстсвует НИЗКИЙ уровень в момент сня- тия внешнего НИЗКОГО уровня с вывода RESET. Векторы прерывания переотображены на начало карты внешней па- мяти. Примечание. Этот режим доступен только для микроконт- роллеров, имеющих контроллер внешней памяти. Таблица 2.8. Местоположения векторов ИС микроконтроллеров семейства LPC2000 Адрес Исключительная ситуаци! 0x0000 0000 Reset Сброс (запуск) 0x0000 0004 Undefined instruction Неопределенная (неправильная) команда 0x0000 0008 SWI Программное прерывание 0x0000 ооос Prefetch Abort Аварийное прекращение работы выбора с упреждением (ошибка выборки команды из памяти) 0x0000 0010 Data Abort Аварийное прекращение выборки данных (ошибка доступа к данным в памяти) 0x0000 0014 Зарезервировано0 0x0000 0018 IRQ 0x0000 001С FIQ ° В документации ARM этот адрес идентифицируется как зарезгрвированный. В микрокон- троллерах семейства LPC2000 этот адрес используется встроенным загрузчиком как ключ (сигна- тура) «правильной» пользовательской программы. Более подробно тго описано в главе 20 «Орга- низация и программирование Flash-памяти».
2.3. Переотображение памяти 61 2.3. Переотображение памяти Как упоминалось выше, весь загрузочный блок может быть «переотобра- жен» (скопирован) в область старших адресов встроенной памяти. Это предус- мотрено для того, чтобы обеспечить возможность совместимости с новыми вер- сиями микроконтроллеров. Таким образом, при использовании встроенных и внешних модулей памяти различного размера, разработчику никогда не потре- буется изменять местоположение загрузочного блока (что потребовало бы из- менения непосредственно кода загрузчика) или способ отображения векторов прерываний загрузочного блока. Области памяти, не относящиеся к размеще- нию векторов прерываний, остаются на прежних местах. На Рис. 2.11, Рис. 2.12 приведены схемы распределения адресного пространства встроенной памяти в вышеперечисленных режимах. Микроконтроллеры LPC213x, LPC214x имеют загрузочный блок размером 12 Кбайт (Рис. 2.12), остальные микроконтроллеры LPC2000 имеют загрузочный блок размером 8 Кбайт (Рис. 2.11). Часть памяти, которая может переотображаться, чтобы обеспечить обработку прерываний в различных режимах, включает в себя область векторов прерываний (32 байта) и дополнительные 32 байта, т. е. имеет размер 64 байта. Переотображение позво- ляет обращаться к физическим адресам с 0x0000 0000 по 0x0000 003F путем про- граммного доступа к другим (переотображенным) адресам. Таким образом, ти- повая пользовательская программа во Flash-памяти может разместить полный обработчик FIQ по адресу 0x0000 001 С, при этом не нужно учитывать границы области памяти. Вектор, размещенный в загрузочном блоке внешней памяти или в SRAM, должен содержать команды передачи управления фактическим программам обработки прерывания или другим командам, которые обеспечи- вают переход к программам обработки прерываний. 2.0Г 2.0Г-8К Загрузочный блок размером 8К (переотображен на встроенную Flash-память) (Вектора прерываний) загрузочного блока 0x80000000 0x7FFF FFFF 2.0Г-12К Загрузочный блок размером 12К (переотображен на встроенную Flash-память) (Вектора прерываний) загрузочного блока 0x80000000 0x7FFFFFFF Зарезервировано для встроенной памяти Зарезервированное адресное пространство 0x40004000 0x4000 3FFF 0x4000 8000 0x4000 7FFF Встроенная SRAM размером 16К Встроенная SRAM размером 32К (Вектора прерываний SRAM) 0x40000000 0x3FFF FFFF ТОГ (Вектора прерываний SRAM) 0x4000 0000 0x3FFF FFFF Зарезервировано для встроенной памяти Зарезервированное адресное пространство (Загрузочный блок 8К, переотображенный на более старший адресный интервал) 0x00020000 0x0001 FFFF Загрузочный блок 12К, переотображенный на более старший адресный интервал) 0x0008 0000 0x0007 FFFF 128К Flash-памяти 512К Flash-памяти 0.0Г Активные вектора прерываний (от Flash, SRAM, загрузочного блока) 0x00000000 0.0Г Активные вектора прерываний (от Flash, SRAM, загрузочного блока) Рис. 2.11. Карта механизма управления встроенной памятью для микроконтроллера LPC2000 с 128К Flash и 16К SRAM 0x00000000 Рис. 2.12. Карта механизма управления встроенной памятью для микроконтроллера LPC214X с 512К Flash и 32К SRAM
62 Глава 2. Организация системной памяти Вышеописанная структура управления памятью выбрана производителем (фирмой NXP) по следующим причинам: 1. Использование переотображения памяти позволяет обработчику FIQ во Flash-памяти «не обращать внимания» на границы областей памяти. 2. В памяти резервируется пространство для хранения 32-битных констант ад- ресов, что позволяет производить так называемые переходы со смещением, т. е. в теле команды перехода указывается величина смещения (адрес в неко- торой специально выделенной области памяти), а в соответствующей ему ячейке памяти находится 32-битная константа — адрес перехода. Примечание. В микроконтроллерах с архитектурой ARM 32-битные константы адресов памяти, используемые в процессорных командах перехода, размещаются транслятором в виде непосредственных значений не в коде операции самой команды (при 32-битном формате ко- манды, в ней не могут быть одновременно указаны собственно код операции и 32-битный ад- рес перехода), а непосредственно в памяти, «поблизости» от места размещения кода операции. Необходимо отметить, что области переотображенной памяти, включая за- грузочный блок и векторы прерывания, размещены не только по дополнитель- ным (виртуального) переотображенным адресам, но и по месту их первоначаль- ного (оригинального) расположения. Более подробное описание механизма переотображения памяти и иллюст- рирующие его действие примеры можно найти в главе 4 «Блок управления системой». 2.4. Аварийное прекращение работы выборки данных Как упоминалось выше, микроконтроллер LPC2000 генерирует ИС аварий- ного прекращения работы, если производится доступ по адресу, который нахо- дится в зарезервированной или несуществующей области адресов. Такими об- ластями, в частности, являются: 1. Области карты памяти, которые не реализованы в ARM: • адресное пространство между встроенной энергонезависимой памятью и встроенной SRAM, обозначенное как «зарезервированная встроенная память» или «резервное пространство адресов» на Рис. 2.1...Рис. 2.8. На- пример, для микроконтроллеров LPC2119/29/94 и LPC2292/94 с Flash- памятью размером 128 Кбайт это диапазон адресов памяти 0x0002 0000...0x3FFF FFFF, а с Flash-памятью размером 256 Кбайт — диапазон 0x0004 0000...0x3FFF FFFF; • адресное пространство между SRAM и внешней памятью, обозначенное как «зарезервированная встроенная память» или «резервное пространс- тво адресов» на Рис. 2.1...Рис. 2.8. Например, для микроконтроллеров LPC2119/29/94 и LPC2292/94 это адресный интервал 0x4000 3FFF..0x7FFF DFFF; • прочая внешняя память, кроме той, которая может быть доступна для контроллера внешней памяти микроконтроллера LPC2000, выполненно- го в 144-выводном корпусе; • зарезервированные области АНВ- и VPB-пространств (см. Рис 2.9). 2. Закрашенное серым адресное пространство АНВ-периферии (см. Рис. 2.10). 3. Отмеченное как неиспользуемое пространство VPB-периферии (см. Табл. 2.1...2.6).
2.4. Аварийное прекращение работы выборки данных 63 Для перечисленных областей попытка доступа к данным и вызов команд приводят к возникновению исключительной ситуации (Data Abort или Prefetch Abort). Кроме того, ИС аварийного прекращения работы выбора с упреждени- ем (Prefetch Abort) возникнет при любом вызове команды, который переотобра- жается на адрес АНВ- или VPB-периферии. При попытке обращения по неопределенному адресу в пределах имеющего- ся адресного пространства VPB-периферии, ИС аварийного прекращения вы- борки данных (Data Abort) не генерируется. Дешифровка адреса в пределах выделенной каждому периферийному уст- ройству области адресного пространства состоит в различении определенных регистров непосредственно этого периферийного устройства. Например, обра- щение по адресу OxEOOODOOO (неопределенный адрес в пределах адресного про- странства устройства UART0) приведет к обращению к регистру, определённо- му по адресу ОхЕОООСООО. Подробности такого совмещения имен и адресов в пределах периферийного пространства не определены в документации на LPC2000. Обратите внимание, что ядро ARM сохраняет флаг аварийного прекраще- ния работы выбора с упреждением (Prefetch Abort) совместно с той командой в конвейере, с которой связана установка этого флага. Но только в том случае, ес- ли была сделана попытка выполнить команду, выбранную для некорректного адреса. Это предотвращает случайные аварийные прекращения работы (напри- мер, в случае, когда выбор с упреждением осуществляется вблизи от границы доступной области памяти).
ГЛАВА 3 КОНТРОЛЛЕР ВНЕШНЕЙ ПАМЯТИ (ЕМС) Модуль контроллера внешней памяти ЕМС реализован только для микро- контроллеров LPC2000 в 144-выводном корпусе, например LPC2292/94. 3.1. Функциональные характеристики Контроллер внешней памяти (ЕМС) имеет следующие функциональные ха- рактеристики: • поддержка статических устройств с отображенной памятью, RAM, ROM, Flash-памяти, burst-ROM и ряда внешних устройств ввода/вывода; • асинхронная операция чтения в постраничном режиме в несинхронизи- рованных подсистемах памяти; • асинхронный доступ для чтения устройств burst-ROM; • независимое конфигурирование до четырех банков памяти, каждый раз- мером до 16 Мбайт; • программируемое количество пустых (неактивных) шинных циклов (1... 16); • программируемая длительность состояния ожидания (до 32 циклов) при чтении и записи статических устройств оперативной памяти; • программируемая длительность начального и последующих состояний ожидания при чтении устройств burst-ROM; • программируемая защита записи; • программируемые операции режима burst; • программируемая внешняя ширина выходных данных: 8, 16 или 32 бита; • программируемый выбор способа (маршрута) чтения байта. 3.2. Описание Контроллер внешней статической памяти — ведомый модуль, подключен- ный к системной шине АМВА АНВ, который обеспечивает интерфейс между шиной АМВА АНВ и внешними устройствами памяти (расположенными вне кристалла LPC2000). Контроллер обеспечивает поддержку одновременно до че- тырех независимых банков памяти с перестраиваемой конфигурацией. Каждый банк памяти может поддерживать SRAM, ROM, Flash-EPROM, burst-ROM и ряд других внешних устройств ввода/вывода. Каждый банк памяти может иметь организацию по 8,16 или 32 бита. Диапазоны адресов, выделенных для каждого из банков внешней памяти, приведены в Табл. 3.1.
3.3. Регистры EMC 65 Таблица 3.1. Диапазоны адресов для банков внешней памяти, подключаемой к микроконтроллеру LPC2000 Банк Диапазон адресов Конфигурационный регистр 0 8000 0000...80FF FFFF BCFG0 1 8100 0000...81FF FFFF BCFG1 2 8200 0000...82FF FFFF BCFG2 3 8300 0000...83FF FFFF BCFG3 Как отмечалось выше, контроллер внешней статической памяти имеется толь- ко в представителях семейства LPC2000, выполненных в 144-выводном корпусе (например, LPC2219/94). Описание выводов, связанных с интерфейсом внешней памяти, приводится в Табл. 3.2. Поскольку для обращения к линиям адресов вне- шней памяти используются имеющиеся выводы микроконтроллера А[23:0], то для декодирования четырех банков памяти используются биты адреса А[25:24]. В соот- ветствии со стандартами производителя (фирмы NXP), эти четыре банка распола- гаются в начале области внешней памяти, изображенной на Рис. 2.1, однако банк О может быть задействован для начальной загрузки при активации режима внешнего пользователя с помощью выводов микроконтроллера BOOT [1:0] (см. Табл. 2.8). Таблица 3.2. Описание выводов контроллера внешней памяти EMC LPC2000 Название Тип Описание вывода D[31:0] Входы/выходы Линии данных внешней памяти A[23:0] Выходы Линии адреса внешней памяти OE Выход Сигнал разрешения вывода с активным НИЗКИМ уровнем BLS[3:0] Выходы Сигналы выбора маршрута байта с активным НИЗКИМ уровнем WE Выход Сигнал разрешения записи с активным НИЗКИМ уровнем CS[3:0] Выходы Сигналы выбора кристалла с активным НИЗКИМ уровнем 3.3. Регистры ЕМС Контроллер внешней памяти ЕМС содержит 4 регистра, которые перечис- лены в Табл. 3.3. Битовая структура регистров контроллера внешней памяти BCFG0...BCFG3 приведена в Табл. 3.4. Таблица 3.3. Карта регистров контроллера внешней памяти ЕМС Название Описание Доступ Значение после сброса Адрес BCFG0 Конфигурационный регистр для банка памяти 0 Чтение/запись 0x0000 FBEF 0xFFE00000 BCFG1 Конфигурационный регистр для банка памяти 1 Чтение/запись 0x2000 FBEF 0xFFE00004 BCFG2 Конфигурационный регистр для банка памяти 2 Чтение/запись 0x1000 FBEF 0xFFE00008 BCFG3 Конфигурационный регистр для банка памяти 3 Чтение/запись 0x0000 FBEF OxFFEOOOOC 304
66 Глава 3. Контроллер внешней памяти (ЕМС) Таблица 3.4, Регистры конфигурации банков 0...3 (BCFG0...BCFG3 - 0xFFE00000...FFE0000C) BCFG0...3 Название бита Функция бита Значение после сброса 3:0 IDCY Это поле задает минимальное количество неактивных циклов CCLK, которое контроллер внешней памяти генерирует между об- ращением для чтения и обращением для записи в данном банке. Неактивные циклы генерируются также между обращениями к данному и к другому банкам, чтобы избежать конфликтной ситуа- ции между устройствами памяти при обращении к шине. Количес- тво неактивных циклов CCLK между такими обращениями равно значению в этом поле плюс 1 1111 4 Зарезер- вирован Зарезервированный бит. Пользовательское программное обеспече- ние не должно производить запись в зарезервированные биты. Значение, получаемое при чтении зарезервированного бита, не оп- ределено NA 9:5 WST1 Это поле управляет длительностью обращения для чтения, если последующие операции чтения являются чтением burst-ROM. Эта длительность (в циклах CCLK) равна значению в данном поле плюс 3 11111 10 RBLE Этот бит должен быть равен 0 для банков с байтовой организацией или без байтового деления, чтобы контроллер внешней памяти в ходе обращения для чтения устанавливал выходы BLS3:0. Этот бит должен быть равен 1 для банков, имеющих организацию по 16 и 32 бита, включая входы выбора байта, чтобы контроллер внешней па- мяти в ходе обращения для чтения сбрасывал выходы BLS3:0 0 15:11 WST2 Для SRAM банков это поле управляет длительностью обращений для записи, при этом: — если уровни на линиях CS, BLS и WE установлены в 1, процесс установки адреса занимает один цикл CCLK; — если уровни на линиях CS, BLS и WE сброшены в 0, длитель- ность обращения по действительному адресу равна (в циклах CCLK) значению данного поля плюс 1; — если линия CS сброшена, а линии BLS и WE установлены, дли- тельность обращения по действительному адресу равна 1 цикл CCLK. Для банков burst-ROM это поле управляет длительностью последу- ющих обращений, равных по длительности значению поля плюс 1 (в циклах CCLK) 11111 16:23 Зарезер- вирован Зарезервированный бит. Пользовательское программное обеспече- ние не должно производить записать в зарезервированные биты. Значение, получаемое при чтении зарезервированного бита, не оп- ределено NA 24 BUSERR Этот бит устанавливается в 1 лишь в том случае, когда контроллер внешней памяти детектирует запрос АМВА более чем на 32 бита данных. Ядро ARM7TDMI-S не будет производить такой запрос 0 25 WPERR Этот бит устанавливается, если пользовательское программное обеспечение пытается произвести запись в защищенный банк (бит WP установлен в 1) 0 26 WP Установка этого бита в 1 защищает банк от записи 0 27 ВМ Установка этого бита в 1 определяет банк как burst-ROM 0 29:28 MW Это поле задает разрядность шины данных для данного банка: 00 = 8 битов, 01 = 16 битов, 10 = 32 бита, 11 = зарезервировано См. Табл. 3.5 31:30 АТ В это поле всегда следует записывать 00 00
3.4. Интерфейс внешней памяти 67 В каждом из этих регистров для соответствующего ему банка памяти можно задавать: • количество неактивных тактовых циклов, вставленных между обращением для чтения и обращением для записи в данном банке, а также между обра- щениями в данный и в другой банки, чтобы избежать конфликтной ситуа- ции между устройствами памяти при обращении к шине (1... 17 тактов); • длительность обращения для чтения, если последует чтение burst-ROM (3...35 тактов); • длительность обращения для записи (3... 19 тактов); • наличие защиты от записи; • организацию банка памяти (по 8, 16 или 32 бита). В Табл. 3.5 приведено состояние битов BCFG0[29:28] (MW) после того, как запускается загрузчик. Аппаратное состояние этих битов по умолчанию после сброса (без запуска загрузчика) равно 1:0. Таблица 3.5. Заданная после сброса по умолчанию разрядность внешней памяти LPC2000 Банк Значения ВООТ[1:0] во время сброса Значения BCFG [29:28] после сброса Разрядность [бит] 0 LL 00 8 0 LH 01 16 0 HL 10 32 1 XX 10 32 2 XX 01 16 3 XX 00 8 3.4. Интерфейс внешней памяти Выбор внешнего интерфейса памяти зависит от заданной организации бан- ка (по 32, 16 или 8 битов, выбранных битами MW в регистре BCFG). Кроме то- го, требуется установить бит RBLE в регистре BCFG в соответствии с типом ис- пользуемых устройств памяти. В случае, если внешняя память состоит из бло- ков по 8 бит, значение бита RBLE = 0, а для микросхем памяти, рассчитанных на работу с 16- или 32-битными данными, бит RBLE необходимо установить в 1. Если банк памяти сконфигурирован по 32 бита, то адресные линии АО и А1 могут использоваться не как линии адреса, а произвольно. Банк памяти, скон- фигурированный по 16 битов, не использует адресную линию АО, а банк памяти с организацией по 8 битов требует наличия всех адресных линий до АО включи- тельно. Конфигурирование линий А1 и/или АО как адресных или неадресных линий производится с помощью битов 23 и 24 в регистре 2 выбора функций вы- водов (PINSEL2). Заданная после сброса по умолчанию разрядность внешней памяти приведена в Табл. 3.5. Функциональные схемы интерфейсов внешней памяти с 32-, 16- и 8-битной организацией приведены, соответственно, на Рис. 3.1, Рис. 3.2, Рис. 3.3. Как мож- но видеть из рисунков, для 32-битного банка памяти пригодны 32-, 16- и 8-битные микросхемы памяти, для 16-битного банка — 16- и 8-битные микросхемы, а для 8- битного банка — только 8-битные микросхемы. Символ «а_Ь» на рисунках отно- сится к самой старшей линии адреса в используемой шине. Символ «а_ш» отно- сится к самой старшей линии адреса в используемой микросхеме памяти.
68 Глава 3. Контроллер внешней памяти (ЕМС) CS ОЕ L- СЕ ---------- ОЕ BLS[3] — WE CE ---------- OE BLS[2] — WE CE OE BLS[1] —I WE *— СЕ ---------- ОЕ BLS[0] — WE A[a_b:2] D[31:24] — Ю[7:0] А[а_т:0] D[23:16] — IO[7:0] i— A[a_m:0] D[15:8] — IO[7:0] r— A[a_m:0] D[7:0] — IO[7:0] r— A[a_m:0] а) Связь банка памяти с 32-битной организацией с 8-битными микросхемами памяти А[а_Ь:2] cs ОЕ WE б) Связь банка памяти с 32-битной организацией с 16-битными микросхемами памяти в) Связь банка памяти с 32-битной организацией с 32-битными микросхемами памяти Рис. 3.1. Функциональные схемы интерфейсов внешней памяти для 32-битного банка памяти CS ОЕ WE СЕ ------- ОЕ ------- WE BLS[1] — UB BLS[0] — LB D[15:0] — IO[15:0] i— A[a_m:0] А[а_Ь:1] а) Связь банка памяти с 16-битной организацией с 8-битными микросхемами памяти б) Связь банка памяти с 16-битной организацией с 16-битными микросхемами памяти Рис. 3.2. Функциональные схемы интерфейсов внешней памяти для 16-битного банка памяти CS----- ОЕ —। *— СЕ --------- ОЕ BLS[0] — WE D[7:0] —I IO[7:0] A[a_m:0] А[а_Ь:0] Рис. 3.3. Функциональные схемы интерфейсов внешней памяти для 8-битного банка памяти
3.5. Типичные шинные последовательности сигналов 69 3.5. Типичные шинные последовательности сигналов На Рис. 3.4 и Рис. 3.5 изображены обобщенные временные диаграммы ти- пичных циклов обращения к внешней памяти при чтении и записи соответс- твенно. Изображенный на рисунках сигнал XCLK — сигнал синхронизации, поступающий на микросхемы внешней памяти с вывода Р3.23 микроконтрол- лера. В тех случаях, когда внешняя память не задействована, этот сигнал ис- пользуется, чтобы обеспечить привязку внешних устройств к тактовому сигналу микроконтроллера по времени (сигналы XCLK и CCLK имеют одинаковую частоту и различаются по фазе). В некоторых специфических случаях вид сигналов на шине внешней памя- ти может отличаться от диаграмм, изображенных на рисунках. Например, ког- да выполняется первое обращение для чтения к банку памяти, который был только что выбран, НИЗКИЙ уровень на линиях CS и ОЕ может появиться раньше по времени относительно сигнала XCLK, чем изображено на Рис. 3.4. Аналогично, в последовательности нескольких идущих подряд обращений для записи в SRAM последнее обращение для записи будет выглядеть несколько иначе, чем изображено на Рис. 3.5. Для корректной записи в этом случае пот- ребуется удерживать данные на шине данных на один тактовый цикл дольше. Остальные циклы обращения к памяти для записи не отличаются от изобра- женного на Рис. 3.5. Рис. 3.4. Цикл обращения к внешней памяти для чтения
70 Глава 3. Контроллер внешней памяти (ЕМС) Рис. 3.5. Цикл обращения к внешней памяти для записи 3.6. Выбор внешней памяти В Табл. 3.6 приведены критерии выбора устройств (микросхем) внешней па- мяти, основанные на приведенном выше описании контроллера внешней па- мяти и типовых параметрах этих микросхем. В таблице: /ram и /write — интер- валы обращения к микросхемам внешней памяти для чтения и для записи, со- ответственно; /Сус “ длительность одного периода сигнала XCLK (см. Рис. 3.4, Рис. 3.5); fmax — максимальная частота CCLK, достижимая в системе с выбран- ной внешней памятью. Таблица 3.6. Системные требования к внешней памяти микроконтроллеров семейства LPC2000 Тип цикла доступа Максимальная частота Установка WST (если WST > 0, следует округлить до целого числа) Требуемое время доступа памяти Стандартное чтение f < 2 + WST1 J max - t . пп „р 'RAM + 2U нс WST1>?ram + 20HC-2 ZCYC 'ram^cyc-(2 + WST1)-20hc Стандартная запись f < 1+WST2 J max - f , c 'RAM + 3 HC WgT2 > ZWRITE ~ ZSYS + 5HC ZCYC Avrite ^cyc*(1 + WST2) — 5 нс
ГЛАВА 4 БЛОК УПРАВЛЕНИЯ СИСТЕМОЙ 4.1. Основные функции Блок управления системой микроконтроллеров семейства LPC2000 включа- ет в себя несколько аппаратных узлов и регистров управления множеством не- зависимых друг от друга функций, связанных с определенными периферийны- ми устройствами. (Под функцией понимается реализация какой-либо отде- льной задачи, связанной с организацией работы того или иного узла периферии микроконтроллера.) Блок управления системой включает в себя: • генератор, стабилизированный кварцевым резонатором; • входы внешних прерываний; • узел управления памятью; • узел ФАПЧ (PLL); • узел управления потребляемой мощностью; • узел сброса; • VPB-делитель; • таймер «пробуждения» из «спящего» режима. Каждая функция (узел) имеет свои собственные регистры, если они требу- ются для контроля и управления, а неиспользуемые в них биты определены как зарезервированные, с учетом последующего их использования в перспективных устройствах. Различные функции никогда не используют совместно регистры с одинаковыми адресами. 4.2. Линии интерфейса управления В Табл. 4.1 дано описание тех выводов микроконтроллеров семейства LPC2000, которые связаны с блоком управления системой. Таблица 4,1, Описание выводов микроконтроллеров LPC2000, связанных с блоком управления системой Название Направление Описание EINT0 Вход Вход внешнего прерывания 0 — универсальный вход прерывания с ак- тивным НИЗКИМ уровнем. Этот вывод может использоваться, чтобы «пробудить» процессор из режимов пониженного энергопотребления Idle или Power Down. В качестве входа EINT0 могут быть выбраны выводы Р0.1 и Р0.16 EINT1 Вход Вход внешнего прерывания 1 — см. EINT0. В качестве входа EINT1 могут быть выбраны выводы РО.З и Р0.14. Примечание. НИЗКИЙ уровень на выводе Р0.14 немедленно после сброса рассматривается внутренней логикой микроконтроллера как запрос внешних аппаратных средств для запуска обработчика внутрис- хемного программирования (ISP). Более подробно о внутрисхемном программировании рассказано в главе 20 «Организация и программи- рование Flash-памяти».
72 Глава 4. Блок управления системой Таблица 4.1. Описание выводов микроконтроллеров LPC2000, связанных с блоком управления системой (продолжение) Название Направление Описание EINT2 Вход Вход внешнего прерывания 2 — см. EINT0. В качестве входа EINT2 могут быть выбраны выводы Р0.7 и Р0.15 EINT3 Вход Вход внешнего прерывания 3 — см. EINT0. В качестве входа EINT3 могут быть выбраны выводы Р0.9, Р0.20 и РО.ЗО XI Вход Вход кварцевого генератора — вход генератора и внутренних цепей ге- нерации синхросигнала Х2 Выход Выход кварцевого генератора — выход усилителя генератора RESET Вход Вход внешнего сброса. НИЗКИЙ уровень на этом выводе сбрасывает микроконтроллер, устанавливая затем на портах ввода/вывода и лини- ях периферийных устройств заданные по умолчанию состояния, а про- цессор начинает выполнение программного кода с адреса 0 4.3. Регистры интерфейса управления Регистры блока управления системой (на примере LPC2119/29/94 и LPC2292/94) перечислены в Табл. 4.2. Все регистры, независимо от их размера, находятся в границах адреса слова. Детальное описание каждого из регистров будет дано ниже при описании выполняемых ими функций. Таблица 4.2. Регистры блока управления системой на примере микроконтроллеров LPC2119/29/94 и LPC2292/94 Название Описание Доступ Значение после сброса^ Адрес Внешние прерывания EXTINT Регистр флагов внешних прерываний Чтение/запись 0 0xE01FC140 EXTWAKE Регистр «пробуждения» от внешних прерываний Чтение/запись 0 0xE01FC144 EXTMODE Регистр режима внешних прерываний Чтение/запись 0 0xE01FC148 EXTPOLAR Регистр полярности внешних прерываний Чтение/запись 0 0xE01FC14C Управление памятью МЕММАР Регистр управления памятью Чтение/запись 0 0xE01FC040 ФАПЧ (PLL) PLLCON Регистр управления PLL Чтение/запись 0 0xE01FC080 PLLCFG Регистр конфигурирования PLL Чтение/запись 0 0xE01FC084 PLLSTAT Регистр состояния PLL Чтение 0 0xE01FC088 PLLFEED Регистр подачи (замыкания петли ФАПЧ) PLL Запись NA 0xE01FC08C Управление мощностью PCON Регистр управления мощностью Чтение/запись 0 OxEOlFCOCO PCONP Регистр управления мощностью периферий- ных устройств Чтение/запись ОхЗВЕ 0xE01FC0C4 УРВ-делитель VPBDIV Регистр управления делителем Чтение/запись 0 OxEOlFClOO ° Значение после сброса относится к данным, сохраненным только в используемых битах. Значения зарезервированных битов не учитываются.
4.4, Стабилизированный кварцевый генератор 73 4.4. Стабилизированный кварцевый генератор В микроконтроллерах LPC2000 может использоваться внешний тактовый сигнал прямоугольной формы («меандр») частотой 1 ...50 МГц. Его следует по- давать на вход XTAL1. Встроенная схема генератора микроконтроллера подде- рживает работу с внешними кварцевыми резонаторами только в частотном диа- пазоне 1...30 МГц. Если в микроконтроллерном устройстве используется встро- енные система ФАПЧ или загрузчик, то входная частота тактового сигнала ограничена диапазоном 10...25 МГц. Генератор выдает частоту, которая далее будет обозначаться как Fosc, а часто- та тактирования процессора ARM далее будет обозначаться как cclk (CCLK). Частоты Fosc и cclk совпадают в том случае, если встроенная система ФАПЧ не используется (разомкнута). Более подробно функционирование системы ФАПЧ будет описано чуть позже в этой главе. Встроенный генератор в микроконтроллерах LPC2000 может работать в од- ном из двух режимов: ведомом и режиме автоколебаний (генерации). Режимы работы встроенного генератора иллюстрируются на Рис. 4.1а...Рис. 4.1в. В ведо- мом режиме входной внешний тактовый сигнал должен быть подан на вход ге- нератора XI через конденсатор емкостью 100 пФ (Сс на Рис. 4.1а) и иметь амп- литуду не менее 200 мВ. Вывод Х2 в этой конфигурации можно оставить сво- бодным. Если выбран ведомый режим, частотный диапазон сигнала Fosc типа «меандр» может составлять 1...50 МГц. а) в) Рис, 4,1, Режимы работы встроенного генератора LPC2000 Внешние компоненты, используемые в режиме автоколебаний, представле- ны на Рис. 4.16, вив Табл. 4.3. Необходимое для генерации сопротивление об- ратной связи уже встроено в микроконтроллер, а емкости CXi и Сх2 должны быть подключены, как изображено на рисунке, для обеспечения генерации на основной частоте используемого кварцевого резонатора (основная частота ре- зонатора определяется величинами элементов L, С1 и Rs эквивалентной схемы резонатора). Емкость Ср, представленная на эквивалентной схеме, представля- ет собой емкость параллельного контура используемого резонатора и не должна превышать 7 пФ. Значения частоты параллельного резонанса, емкостей, индук- тивности и сопротивления эквивалентной схемы кварцевого резонатора обыч- но указываются его производителем. Выбранный режим автоколебаний огра- ничивает значение Fosc частотным диапазоном 1...30 МГц.
74 Глава 4. Блок управления системой Таблица 4.3. Рекомендованные значения CXi/Cx2 в режиме автоколебаний (параметры кварцевого резонатора и других внешних компонентов) Основная частота генератора Fc Эквивалентная емкость резонатора CL Максимальное эквивалентное сопротивление резонатора Rs Внешние емкости СхьОсг 1...5МГЦ 10 пФ NA NA 20 пФ NA NA 30 пФ < 300 Ом 58 пФ, 58 пФ 5...10 МГц 10 пФ < 300 Ом 18 пФ, 18 пФ 20 пФ < 300 Ом 38 пФ, 38 пФ 30 пФ < 300 Ом 58 пФ, 58 пФ 10...15 МГц 10 пФ < 300 Ом 18 пФ, 18 пФ 20 пФ < 220 Ом 38 пФ, 38 пФ 30 пФ < 140 Ом 58 пФ, 58 пФ 15...20 МГц 10 пФ < 220 Ом 18 пФ, 18 пФ 20 пФ < 140 Ом 38 пФ, 38 пФ 30 пФ < 80 Ом 58 пФ, 58 пФ 20...25 МГц 10 пФ < 160 Ом 18 пФ, 18 пФ 20 пФ <90 Ом 38 пФ, 38 пФ 30 пФ < 50 Ом 58 пФ, 58 пФ 25...30 МГц 10 пФ < 130 Ом 18 пФ, 18 пФ 20 пФ < 50 Ом 38 пФ, 38 пФ 30 пФ NA NA 4.4.1. Алгоритм выбора тактовой частоты Блок-схема алгоритма выбора тактовой частоты Fosc изображена на Рис. 4.2. В зависимости от заданных в пользовательском приложении начальных усло- вий (использования или не использования встроенной системы ФАПЧ, необ- ходимости загрузки с помощью ISP, наличия или отсутствия внешнего кварце- вого резонатора), рекомендуется один из двух вариантов тактирования микро- контроллера (Рис. 4.1а, Рис. 4.16) и указываются допустимые пределы Fosc. 4.5. Входы внешних прерываний Микроконтроллеры семейства LPC2000 имеют четыре входа внешних пре- рываний, выбор которых осуществляется путем настройки соответствующих контактов ввода/вывода микросхемы^. Входы внешних прерываний могут быть произвольным образом задействованы, чтобы «пробудить» процессор из режи- ма пониженного энергопотребления Power Down. Все контакты вводз/вывода микроконтроллеров LPC2000 имеют дополнительные функции, выбор которых производится с помощью мультиплексоров блока коммутации выводов (pin select block). Так, входы внешних прерываний физически «делят» одни и те же контакты микросхемы с линиями порта ввода/вывода общего назначения, входами ШИМ-модулятора и т. д. (Прим. науч, ред.)
4.5. Входы внешних прерываний 75 Рис, 4.2. Алгоритм выбора тактовой частоты Fosc 4.5.1. Описание регистров С функцией обработки внешних прерываний связаны четыре регистра, пе- речисленные в Табл. 4.4. Регистр EXTINT содержит флаги прерываний. Регистр EXTWAKE — это регистр разрешения пробуждения от внешних прерываний. В зависимости от его состояния (значения записанных в него битов), внешним прерываниям разрешается или запрещается «пробуждать» микроконтроллер (т. е. переводить его из режима Power Down в активное состояние). Регистры EXTMODE и EXTPOLAR задают активные уровень и фронт/спад внешнего сигнала, вызывающего внешнее прерывание. Таблица 4.4. Регистры внешних прерываний Адрес Название Описание Доступ 0xE01FC140 EXTINT Регистр флагов внешних прерываний, который содержит флаги прерываний EINTO, EINT1, EINT2 и EINT3 R/W 0xE01FC144 EXTWAKE Регистр «пробуждения» от внешних прерываний, который содержит три бита, значения которых управляют возможнос- тью «пробуждения» процессора от внешних прерываний из режима Power Down R/W 0xE01FC148 EXTMODE Регистр режима внешних прерываний, который задает, фрон- том или уровнем на входе EINT0...EINT3 будет иницииро- ваться соответствующее внешнее прерывание R/W 0xE01FC14C EXTPOLAR Регистр управления полярностью внешних прерываний зада- ет, фронтом/спадом импульса или уровнем положитель- ной/отрицательной полярности будет инициироваться вне- шнее прерывание R/W
76 Глава 4. Блок управления системой Регистр флагов внешних прерываний (EXTINT — 0xE01FC140) Битовая структура регистра EXTINT приведена в Табл. 4.5. Таблица 4.5. Регистр флагов внешних прерываний (EXTINT — 0xE01FC140) Номер бита Назва- ние бита Функция бита Значение после сброса 0 EINT0 В режиме, когда внешние прерывания вызываются уровнем сигнала, этот бит устанавливается, если для вывода микроконтроллера выбрана функция EINT0 и на этот вывод подан внешний сигнал активного уровня. В режиме, когда внешнее прерывание вызывается фронтом/спадом импульса, этот бит устанавливается, если для вывода микроконтроллера выбрана функция EINT0 и на этот вывод подан активный перепад внешнего сигнала. Для реализации функции EINT0 можно использовать выводы РО. 1 и РО. 16 микроконтроллера (см. главу 7 «Цоколевка и назначение выводов»). Чтобы сбросить этот бит, следует программно записать в него 1 (кроме слу- чая, когда внешнее прерывание вызывается уровнем сигнала и этот вне- шний активный уровень присутствует на входе внешнего прерывания) 0 1 EINT1 В режиме, когда внешние прерывания вызываются уровнем сигнала, этот бит устанавливается, если для вывода микроконтроллера выбрана функция EINT1 и на этот вывод подан внешний сигнал активного уровня. В режиме, когда внешнее прерывание вызывается фронтом/спадом импульса, этот бит устанавливается, если для вывода микроконтроллера выбрана функция EINT1 и на этот вывод подан активный перепад внешнего сигнала. Для реализации функции EINT1 можно использовать выводы РО.З и Р0.14 микроконтроллера (см. главу 7 «Цоколевка и назначение выводов»). Чтобы сбросить этот бит, следует программно записать в него 1 (кроме слу- чая, когда внешнее прерывание вызывается уровнем сигнала и этот вне- шний активный уровень присутствует на входе внешнего прерывания) 0 2 EINT2 В режиме, когда внешние прерывания вызываются уровнем сигнала, этот бит устанавливается, если для вывода микроконтроллера выбрана функция EINT2 и на этот вывод подан внешний сигнал активного уровня. В режиме, когда внешнее прерывание вызывается фронтом/спадом импульса, этот бит устанавливается, если для вывода микроконтроллера выбрана функция EINT2 и на этот вывод подан активный перепад внешнего сигнала. Для реализации функции EINT2 можно использовать выводы Р0.7 и РО. 15 микроконтроллера (см. главу 7 «Цоколевка и назначение выводов»). Чтобы сбросить этот бит, следует программно записать в него 1 (кроме слу- чая, когда внешнее прерывание вызывается уровнем сигнала и этот вне- шний активный уровень присутствует на входе внешнего прерывания) 0 3 EINT3 В режиме, когда внешние прерывания вызываются уровнем сигнала, этот бит устанавливается, если для вывода микроконтроллера выбрана функция EINT3 и на этот вывод подан внешний сигнал активного уровня. В режиме, когда внешнее прерывание вызывается фронтом/спадом импульса, этот бит устанавливается, если для вывода микроконтроллера выбрана функция EINT3 и на этот вывод подан активный перепад внешнего сигнала. Для реализации функции EINT3 можно использовать выводы Р0.9, Р0.20 и РО.ЗО микроконтроллера (см. главу 7 «Цоколевка и назначение выводов»). Чтобы сбросить этот бит, следует программно записать в него 1 (кроме слу- чая, когда внешнее прерывание вызывается уровнем сигнала и этот вне- шний активный уровень присутствует на входе внешнего прерывания) 0 7:4 Заре- зерви- рованы Данные биты зарезервированы. Пользовательское программное обеспе- чение не должно производить запись в зарезервированные биты. Чтение зарезервированного бита возвращает неопределенное значение NA Когда выбрана функция обработки внешнего прерывания с вывода мик- роконтроллера, уровень входного сигнала или фронт/спад импульса на этом выводе (в зависимости от состояния битов в регистрах EXTPOLAR и EXTMODE) вызывает установку соответствующего флага прерывания в ре-
4.5. Входы внешних прерываний 77 гистре EXTINT. Далее запрос на прерывание поступает в контроллер векторов прерываний VIC (Vectored Interrupt Controller). Если внешние прерывания разрешены, то контроллер VIC инициирует запуск соответствующего обра- ботчика прерываний. Для того, чтобы очистить (сбросить) любой из битов EINT0...EINT3 регист- ра EXTINT, необходимо предварительно программным путем записать в него логическую 1. В этом случае, чтение соответствующего бита возвращает 0. В ре- жиме, когда внешнее прерывание инициируется активным уровнем сигнала (значение соответствующего бита в регистре EXTMODE равно 0 — см. Табл. 4.7), очистить (сбросить) указанным способом бит EINT можно лишь после того, как прекратилась подача активного уровня сигнала на вход внешне- го прерывания. Регистр «пробуждения» от внешних прерываний (EXTWAKE—0xE01FC144) Битовая структура регистра EXTWAKE (на примере микроконтроллеров LPC2119/29/94 и LPC2292/94) приведена в ТЬбл. 4.6. В зависимости от состоя- ния регистра EXTWAKE, внешним прерываниям разрешается или запрещается «пробуждать» микроконтроллер, если он находится в режиме Power Down. Что- бы «пробуждение» состоялось, для вывода микроконтроллера должна быть за- дана соответствующая функция EINTn. При этом, для «пробуждения» не требу- ется разрешения данного прерывания в контроллере векторов прерываний (VIC), что предоставляет в распоряжение пользователя дополнительные воз- можности. Так, можно произвести «пробуждение» из режима Power Down без вызова прерывания (простое возобновление выполнения программы), либо, напротив, выполнить в режиме Power Down разрешенное прерывание без «про- буждения» микроконтроллера (что позволяет в случае, когда в конкретном пользовательском приложении «пробуждение» из режима Power Down нежела- тельно, обойтись без запрета прерывания). Таблица 4.6. Регистр пробуждения от внешних прерывании на примере устройств LPC2119/29/94 и LPC2292/94 (EXTWAKE - 0xE01FC144) Номер бита Название бита Функция бита Значение после сброса 0 EXTWAKE0 Когда этот бит установлен, заданный активный уровень или пере- пад на входе EINT0 «пробудит» процессор из режима Power Down 0 1 EXTWAKE 1 Когда этот бит установлен, заданный активный уровень или пере- пад на входе EINT1 «пробудит» процессор из режима Power Down 0 2 EXTWAKE2 Когда этот бит установлен, заданный активный уровень или пере- пад на входе EINT2 «пробудит» процессор из режима Power Down 0 3 EXTWAKE3 Когда этот бит установлен, заданный активный уровень или пере- пад на входе EINT3 «пробудит» процессор из режима Power Down 0 7:4 Зарезерви- рованы Данные биты зарезервированы. Пользовательское программное обеспечение не должно производить запись в зарезервированные биты. Чтение зарезервированного бита возвращает неопределенное значение NA
78 Глава 4. Блок управления системой Регистр режима внешних прерываний (EXTMODE — OxEOIFC 148) Битовая структура регистра EXTMODE приведена в Табл. 4.7. Устанавливая биты этого регистра, можно задавать каким образом (уров- нем внешнего сигнала на соответствующем выводе или его фронтом/спадом) будет вызываться каждое из прерываний EINTn. Внешние прерывания могут быть инициированы входными сигналами только на тех выводах, для которых выбрана функция EINTn, а также разрешена, в регистре VICIntEnable, функ- ция обработки внешних прерываний (см. главу 6 «Контроллер векторов пре- рываний»). Примечание. Если внешнее прерывание было запрещено в регистре VICIntEnable, пе- ред повторным разрешением прерывания пользовательская программа должна записать ло- гическую единицу в соответствующий бит регистра EXTINT, чтобы (в соответствии с логи- кой работы данного регистра) сбросить этот бит, который ранее мог быть аппаратно установлен. Таблица 4.7. Регистр режима внешних прерываний (EXTMODE — 0xE01FC148) Номер бита Название бита Функция бита Значение после сброса 0 EXTMODEO Когда этот бит сброшен, прерывание EINT0 вызывается уров- нем. Когда этот бит установлен, прерывание EINT0 вызывается перепадом 0 1 EXTMODE1 Когда этот бит сброшен, прерывание EINT1 вызывается уров- нем. Когда этот бит установлен, прерывание EINT1 вызывается перепадом 0 2 EXTMODE2 Когда этот бит сброшен, прерывание EINT2 вызывается уров- нем. Когда этот бит установлен, прерывание EINT2 вызывается перепадом 0 3 EXTMODE3 Когда этот бит сброшен, прерывание EINT3 вызывается уров- нем. Когда этот бит установлен, прерывание EINT3 вызывается перепадом 0 7:4 Зарезервиро- ваны Данные биты зарезервированы. Пользовательское программное обеспечение не должно производить запись в зарезервирован- ные биты. Чтение такого бита возвращает неопределенное зна- чение NA Регистр полярности внешних прерываний (EXTPOLAR — ОхЕ01FC14C) Битовая структура регистра EXTPOLAR приведена в Табл. 4.8. В режиме, когда прерывание вызывается уровнем, биты этого регистра зада- ют, будет ли этот активный уровень ВЫСОКИМ или НИЗКИМ. В режиме, ког- да прерывание вызывается перепадом, биты в этом регистре задают, будет ли активный перепад положительным или отрицательным. Функция обработки внешнего прерывания может быть инициирована входными сигналами только на тех выводах, которые назначены для выполнения функции EINTn (см. главу 8 «Блок коммутации выводов»), и прерывания от которых разрешены в регистре VICIntEnable (см. главу 6 «Контроллер векторов прерываний»). Стоит отметить,
4.5. Входы внешних прерываний 79 что входные сигналы на выводах, назначенных для выполнения других функ- ций, могут вызывать прерывания от этих функций. Примечание. Если внешнее прерывание было запрещено в регистре VICIntEnable, перед повторным разрешением прерывания пользовательская программа должна записать логичес- кую единицу в соответствующий бит регистра EXTINT, чтобы (в соответствии с логикой рабо- ты данного регистра) сбросить этот бит, который мог быть ранее аппаратно установлен при изменении полярности внешних сигналов. Таблица 4.8. Регистр полярности внешних прерываний (EXTPOLAR — 0xE01FC14C) Номер бита Название бита Функция бита Значение после сброса 0 EXTPOLARO Когда этот бит сброшен, прерывание EINT0 вызывается НИЗ- КИМ уровнем внешнего сигнала или отрицательным перепадом (в зависимости от значения бита EXTMODEO). Когда этот бит установлен, прерывание EINT0 вызывается ВЫ- СОКИМ уровнем внешнего сигнала или положительным пере- падом (в зависимости от значения бита EXTMODEO) 0 1 EXTPOLAR1 Когда этот бит сброшен, прерывание EINT1 вызывается НИЗ- КИМ уровнем внешнего сигнала или отрицательным перепадом (в зависимости от значения бита EXTMODE1). Когда этот бит установлен, прерывание EINT1 вызывается ВЫ- СОКИМ уровнем внешнего сигнала или положительным пере- падом (в зависимости от значения бита EXTMODE1) 0 2 EXTPOLAR2 Когда этот бит сброшен, прерывание EINT2 вызывается НИЗ- КИМ уровнем внешнего сигнала или отрицательным перепадом (в зависимости от значения бита EXTMODE2). Когда этот бит установлен, прерывание EINT2 вызывается ВЫ- СОКИМ уровнем внешнего сигнала или положительным пере- падом (в зависимости от значения бита EXTMODE2) 0 3 EXTPOLAR3 Когда этот бит сброшен, прерывание EINT3 вызывается НИЗ- КИМ уровнем внешнего сигнала или отрицательным перепадом (в зависимости от значения бита EXTMODE3). Когда этот бит установлен, прерывание EINT3 вызывается ВЫ- СОКИМ уровнем внешнего сигнала или положительным пере- падом (в зависимости от значения бита EXTMODE3) 0 7:4 Зарезервиро- ваны Пользовательское программное обеспечение не должно произво- дить запись в зарезервированные биты. Чтение зарезервирован- ного бита возвращает неопределенное значение NA 4.5.2. Множества выводов внешних прерываний Для каждого из внешних прерываний EINT3:0 в регистре выбора выводов (его описание приведено в главе 8 «Блок коммутации выводов») можно про- граммно задавать соответствие тем или иным выводам микроконтроллера (вы- бирая их из определенного множества выводов). Состояние отвечающих за об- работку внешних прерываний EINT3:0 встроенных логических модулей микро- контроллера определяется входными сигналами на назначенных для этих прерываний выводах, а также задаваемыми программно сигналами выбора этих выводов для функции EINTn.
80 Глава 4, Блок управления системой В случае, когда для того или иного внешнего прерывания назначено бо- лее одного вывода, выходные состояния аппаратной логики внешних пре- рываний определяются состояниями соответствующих битов в регистрах режима и полярности. Ниже приведены возможные варианты такой уста- новки: • в режиме с активным НИЗКИМ уровнем (In Low-Active Level Sensitive) все выводы, назначенные для функции EINTn, логически объединены по формуле положительной логики И (AND); • в режиме с активным ВЫСОКИМ уровнем (In High-Active Level Sensitive) все выводы, назначенные для функции EINTn, логически объединены по формуле положительной логики ИЛИ (OR); • в режиме с активным положительным перепадом (In Edge Sensitive), не- зависимо от полярности, используется вывод с наименьшим номером ли- нии порта ввода/вывода общего назначения GPIO. Примечание. Назначение нескольких выводов внешних прерываний EINTn в режиме с активным положительным перепадом не рекомендуется, так как может привести к ошибке. На функциональной схеме обработки внешних прерываний (Рис. 4.3) пока- зано, как формируется выходной сигнал EINTi. Когда в множестве выводов внешних прерываний имеется более одного вы- вода EINTn и они логически объединены по схеме логического ИЛИ, то под- программа обработки прерывания может считывать состояния этих выводов как линий ввода/вывода GPIO с использованием регистров IOOPIN и IO1PIN, чтобы определить, сигнал на каком выводе(-ах) вызвал прерывание. Разрешение kVIC VPB чтение из EXTINT Рис. 4.3. Функциональная схема аппаратной логики внешних прерываний EINT 4.6. Управление памятью Управление памятью заключается в переотображении области векторов прерываний таким образом, чтобы, с точки зрения пользователя, она всегда на- чиналась с адреса 0x00000000. Это позволяет управлять прерываниями с помо- щью программного кода, размещенного в различных областях памяти.
4.6. Управление памятью 81 Регистр управления памятью (MEMMAP — 0xE01FC040) Описание регистра МЕММАР приведено в Табл. 4.9. Битовая структура регистра МЕММАР приведена в Табл. 4.10. Таблица 4.9. Регистр МЕММАР Адрес Название Описание Доступ 0xE01FC040 МЕММАР Регистр управления памятью. Определяет, читаются ли вектора прерывания ARM из загрузочного блока во Flash-памяти, пользовательской Flash-памяти или оперативной памяти R/W Таблица 4.10. Биты регистра МЕММАР (МЕММАР — 0xE01FC040) Номер бита Название бита Функция бита Значение после сброса1* 1:0 МАР1:0 00: Режим загрузчика. Векторы прерывания переотображены в загру- зочный блок. 01: Режим пользовательской Flash-памяти. Векторы прерывания не переотображены и постоянно находятся во Flash-памяти. 10: Режим пользовательской оперативной памяти. Векторы прерыва- ния переотображены в статическую оперативную память SRAM. 11: Режим пользовательской внешней памяти. Векторы прерывания переотображены во внешнюю память. Этот режим доступен только для устройств в 144-выводном корпусе, имеющих контроллер внешней памяти, и не должен задаваться, ког- да используются другие микроконтроллеры семейства LPC2000. Предупреждение. Некорректное задание значений этих битов может привести к неверному функционированию микроконтроллера 0 7:2 Зарезер- вированы Пользовательское программное обеспечение не должно производить запись в зарезервированные биты. Чтение зарезервированного бита возвращает неопределенное значение NA *) Значение битов МАР после аппаратного сброса равно 00. Это значение дает возможность пользователю видеть результаты выполнения кода загрузчика, который всегда инициируется при сбросе. 4.6.1. Рекомендации по использованию возможности управления памятью Механизм управления памятью просто выбирает один из трех доступных источников данных (состоящих из 64 байтов каждый) необходимых для обра- ботки исключительной ситуации ARM. Например, всякий раз, когда сгенери- рован запрос программного прерывания, ядро ARM будет выбирать 32-бит- ные данные, «расположенные» по адресу 0x00000008 (см. Табл. 2.1). Однако ес- ли биты МЕММАР[1:0] = 10 (режим пользовательской оперативной памяти), то чтение/выборка по адресу 0x00000008 возвратит данные, реально хранящие- ся по адресу 0x40000008. Если биты МЕММАР[1:0] = 01 (режим пользователь- ской Flash-памяти), то чтение/выборка по адресу 0x00000008 возвратит дан- ные, реально хранящиеся во встроенной Flash-памяти по адресу 0x00000008. В случае, когда биты МЕММАР[1:0] = 00 (режим загрузчика), то чтение/выбор- ка по адресу 0x00000008 возвратит данные, хранящиеся по адресу 0x7FFFE008 (загрузочный блок, переотображенный во встроенную Flash-память). 304
82 Глава 4. Блок управления системой 4.7. Встроенная система ФАПЧ Микроконтроллеры семейства LPC2000 имеют встроенную систему фазо- вой автоподстройки частоты — ФАПЧ (Phase Locked Loop — PLL). Входной сигнал системы ФАПЧ может лежать в частотном диапазоне 10...25 МГц. Эта частота, умноженная на некоторую величину, с помощью управляемого током генератора Current Controlled Oscillator (ССО) преобразуется в частоту cclk, ле- жащую в диапазоне 10...60 МГц. Множителем является целое число в интервале 1...32 (практически, значение множителя в микроконтроллерах LPC2000, вследствие наличия верхнего предела тактовой частоты центрального процес- сора, не превышает 6). Управляемый током генератор ССО работает в диапазо- не 156...320 МГц, поэтому для того, чтобы частота cclk на выходе ФАПЧ находи- лась в диапазоне 10...60 МГц, в цепь обратной связи ФАПЧ включен дополни- тельный программируемый делитель. Его коэффициент деления может равняться 2, 4, 8 или 16. Поскольку минимальный коэффициент деления вы- ходного делителя ФАПЧ равен двум, то с выхода ФАПЧ всегда снимается сиг- нал формы «меандр». Блок-схема ФАПЧ приведена на Рис. 4.4. Рис, 4.4, Блок-схема ФАПЧ Активация системы ФАПЧ производится через регистр PLLCON. Значения множителя ФАПЧ и коэффициента деления выходного делителя задаются в ре- гистре PLLCFG. Эти два регистра имеют защиту, чтобы предотвратить случай- ное изменение параметров ФАПЧ или случайную дезактивацию ФАПЧ. Пос- кольку все операции, связанные с синхронизацией микроконтроллера, вклю- чая работу сторожевого таймера, зависят от ФАПЧ, то любое случайное изменение параметров ФАПЧ может привести к непредсказуемому поведению микроконтроллера. Защита настроек системы ФАПЧ, подобно защите сторо- жевого таймера, обеспечивается тем, что для доступа к ним необходимо генери- ровать специальную последовательность. Более подробно об этом рассказано в описании регистра PLLFEED.
4,7. Встроенная система ФАПЧ 83 По умолчанию, после сброса микроконтроллера, а также в режиме Power Down система ФАПЧ отключена, а ее работа может быть разрешена програм- мой пользователя. Программа должна сконфигурировать и активизировать ФАПЧ, дождаться замыкания петли ФАПЧ, а затем скоммутировать выход ФАПЧ в качестве источника тактовой частоты микроконтроллера. 4.7.1. Описание регистров ФАПЧ Управляющие регистры системы ФАПЧ представлены в Табл. 4.11 (на при- мере микроконтроллеров LPC2119/29/94 и LPC2292/94). Более детальные их описания будут даны ниже. Микроконтроллеры LPC2000, имеющие в своем со- ставе модуль USB, помимо указанного в Табл. 4.11 набора регистров ФАПЧ (PLL0), имеют дополнительный набор регистров ФАПЧ (PLL1). Предупреждение. Некорректная установка настроек ФАПЧ может привести к неправиль- ному функционированию микроконтроллера. Таблица 4.11. Регистры системы ФАПЧ на примере микроконтроллеров LPC2119/29/94 и LPC2292/94 Адрес Название Описание Доступ 0xE01FC080 PLLCON Регистр управления ФАПЧ. Служит для временного хранения информации, необходимой для того, чтобы модифицировать служебные биты ФАПЧ. Значения, записанные в этот ре- гистр, не задействуются, пока не выработана корректная пос- ледовательность подачи (ввода данных) ФАПЧ R/W 0xE01FC084 PLLCFG Регистр конфигурации ФАПЧ. Служит для временного хране- ния информации, необходимой для того, чтобы модифициро- вать настройки конфигурации ФАПЧ. Значения, записанные в этот регистр, не задействуются, пока не выработана коррек- тная последовательность подачи (ввода данных) ФАПЧ R/W 0xE01FC088 PLLSTAT Регистр состояния ФАПЧ. Чтение этого регистра возвращает информацию, только что записанную в регистры управления и конфигурации ФАПЧ. Регистр PLLSTAT не будет достоверно отражать состояние ФАПЧ в случае, если запись в регистры PLLCON или PLLCFG была произведена, но корректная последователь- ность подачи (ввода данных) ФАПЧ не была выработана RO 0xE01FC08C PLLFEED Регистр подачи ФАПЧ. В этом регистре разрешается загрузка данных управления и конфигурации ФАПЧ из регистров PLLCON и PLLCFG в теневые регистры, которые фактичес- ки обеспечивают управление и конфигурацию ФАПЧ WO Регистр управления ФАПЧ (PLLCON - 0xE01FC080) Битовая структура регистра PLLCON приведена в Табл. 4.12. Регистр PLLCON содержит управляющие биты, которые используются для подключения к микроконтроллеру системы ФАПЧ и разрешения ее работы. При включении ФАПЧ происходит замыкание ее петли с текущими заданными значениями множителя входного преобразователя частоты и коэффициента де- ления программируемого делителя. При подключении ФАПЧ к микроконтрол- леру, его центральный процессор и все встроенные модули периферийных фун- кций тактируются выходными сигналами ФАПЧ. Изменения содержимого ре- гистра PLLCON не вступают в силу, пока не будет выработана корректная последовательность подачи (ввода данных) ФАПЧ (см. описание регистра по- дачи ФАПЧ (PLLFEED - 0xE01FC08C)).
84 Глава 4. Блок управления системой Система ФАПЧ должна быть сконфигурирована и включена с замыканием петли обратной связи до того, как ФАПЧ станет использоваться в качестве ис- точника синхронизации микроконтроллера. Специальная внутренняя схема координирует операции переключения синхронизации на ФАПЧ и обратно, чтобы гарантировать их проведение без сбоев. Следует заметить, что аппарат- ные средства не обеспечивают замыкание петли ФАПЧ до ее подключения к микроконтроллеру, а также автоматическое отключение ФАПЧ от микроконт- роллера при размыкании ее петли в ходе работы. Размыкание петли ФАПЧ мо- жет быть вызвано нестабильностью частоты задающего генератора, а в этом случае отключение ФАПЧ от микроконтроллера не исправит ситуацию. Таблица 4.12. Биты регистра управления ФАПЧ (PLLCON — 0xE01FC080) Номер бита Название бита Функция бита Значение после сброса 0 PLLE Бит включения ФАПЧ. Когда этот бит установлен и произведена выдача корректной последовательности подачи (ввода данных) ФАПЧ, то ФАПЧ активируется и петля ФАПЧ замыкается на требу- емой частоте (см. описание регистра PLLSTAT, Табл. 4.14) 0 1 PLLC Бит подключения ФАПЧ к микроконтроллеру. Когда биты PLLC и PLLE установлены и произведена выдача корректной последова- тельности подачи (ввода данных) ФАПЧ, то система ФАПЧ под- ключается к микроконтроллеру и становится для него источником синхросигнала (см. описание регистра PLLSTAT, Табл. 4.14) 0 7:2 Зарезер- вированы Пользовательское программное обеспечение не должно произво- дить запись в зарезервированные биты. Чтение зарезервированного бита возвращает неопределенное значение NA Регистр конфигурации ФАПЧ (PLLCFG — 0xE01FC084) Битовая структура регистра PLLCFG приведена в Табл. 4.13. Регистр PLLCFG содержит значения множителя входного преобразователя частоты и коэффициента деления программируемого делителя ФАПЧ. Измене- ния регистра PLLCFG не вступают в силу, пока не будет выработана корректная последовательность подачи (ввода данных) ФАПЧ (см. описание регистра по- дачи ФАПЧ (PLLFEED — 0xE01FC08C)). Методика вычисления частоты ФАПЧ и значений множителя и коэффициента деления приведены в подразде- ле 4.7.5 «Вычисление частоты ФАПЧ». Таблица 4.13. Биты регистра конфигурации ФАПЧ (PLLCFG — 0xE01FC084) Номер бита Название бита Функция бита Значение после сброса 4:0 MSEL4:0 Значение множителя частоты системы ФАПЧ. Соответствует вели- чине «М» в формулах вычисления частоты ФАПЧ. Примечание. Более подробно о выборе правильного значения MSEL4:0 см. подраздел 4.7.5 «Вычисление частоты ФАПЧ». 0 6:5 PSEL1:O Значение коэффициента деления программируемого делителя часто- ты системы ФАПЧ. Соответствует величине «Р» в формулах вычисле- ния частоты ФАПЧ. Примечание. Более подробно о выборе правильного значения PSELL0 см. подраздел 4.7.5 «Вычисление частоты ФАПЧ». 0 7 Зарезер- вирован Пользовательское программное обеспечение не должно производить запись в зарезервированные биты. Чтение зарезервированного бита возвращает неопределенное значение NA
4.7. Встроенная система ФАПЧ 85 Регистр состояния ФАПЧ (PLLSTAT-0xE01FC088) Битовая структура регистра PLLSTAT приведена в Табл. 4.14. Регистр PLLSTAT доступен только для чтения и при чтении возвращает фак- тические параметры ФАПЧ, которые являются действительными во время этого чтения, как и состояние ФАПЧ. Текущее прочитанное содержимое регистра PLLSTAT может не согласовываться со значениями, содержащимися в регистрах PLLCON и PLLCFG, потому что изменения содержимого этих регистров не всту- пают в силу, пока не будет выработана корректная последовательность подачи (ввода данных) ФАПЧ (см. описание регистра подачи ФАПЧ (PLLFEED — 0xE01FC08C)). Таблица 4.14. Биты регистра состояния ФАПЧ (PLLSTAT — 0xE01FC088) Номер бита Название бита Функция бита Значение после сброса 4:0 MSEL4:0 Считывание этого бита возвращает последнее записанное в ФАПЧ значение множителя. Это значение, используемое ФАПЧ на мо- мент чтения 0 6:5 PSEL1:O Считывание этого бита возвращает последнее записанное в ФАПЧ значение коэффициента деления программируемого делителя час- тоты. Это значение, используемое ФАПЧ на момент чтения 0 7 Зарезер- вирован Пользовательское программное обеспечение не должно произво- дить запись в зарезервированные биты. Чтение зарезервированно- го бита возвращает неопределенное значение NA 8 PLLE Считывание этого бита возвращает последнее записанное в ФАПЧ значение бита включения. ВЫСОКИЙ уровень (т. е. бит установ- лен в логическую 1) означает, что система ФАПЧ на момент чтения активирована. НИЗКИЙ уровень (сброс в 0) означает, что система ФАПЧ выключена. Этот бит автоматически сбрасывается, когда микроконтроллер переходит в режим Power Down 0 9 PLLC Считывание этого бита возвращает последнее записанное в ФАПЧ значение бита подключения ФАПЧ к микроконтроллеру. Если би- ты PLLC и PLLE установлены, ФАПЧ является источником синх- ронизации для микроконтроллера. Если один из битов PLLC или PLLE сброшен, ФАПЧ не участвует в синхронизации микроконт- роллера и синхроимпульсы поступают в обход системы ФАПЧ не- посредственно в микроконтроллер. Этот бит автоматически сбра- сывается, когда устройство переходит в режим Power Down 0 10 PLOCK Значение этого бита отражает текущее состояние петли ФАПЧ. Когда бит сброшен, петля ФАПЧ не замкнута. Когда бит установ- лен в 1, петля ФАПЧ замкнута на требуемой частоте 0 15:11 Зарезер- вированы Пользовательское программное обеспечение не должно произво- дить запись в зарезервированные биты. Чтение зарезервированно- го бита возвращает неопределенное значение NA 4.7.2. Прерывание от ФАПЧ Бит PLOCK в регистре PLLSTAT связан с контроллером прерываний. Про- граммист может учесть это обстоятельство, когда будет производить включение ФАПЧ. Время ожидания, необходимое для замыкания петли ФАПЧ, может ис- пользоваться программой для выполнения других задач. Когда будет сгенери- ровано прерывание от ФАПЧ и автоматически установится бит PLOCK, про- грамма может подключить ФАПЧ к микроконтроллеру и запретить прерывание от ФАПЧ.
86 Глава 4. Блок управления системой 4.7.3. Режимы ФАПЧ Возможные комбинации битов PLLE и PLLC, задающие режимы функцио- нирования ФАПЧ, приведены в Табл. 4.15. Таблица 4.15. Комбинации служебных битов ФАПЧ, задающие режим ФАПЧ PLLC PLLE Функция 0 0 Система ФАПЧ выключена и отключена от микроконтроллера. Синхронизация микроконтроллера осуществляется непосредственно от входа синхронизации 0 1 Система ФАПЧ активна, но не подключена к микроконтроллеру. ФАПЧ может быть подключена к микроконтроллеру после того, как будет установлен бит PLOCK 1 0 Случай, идентичный комбинации 00. Эта комбинация предотвращает возмож- ность подключения ФАПЧ к микроконтроллеру, если система ФАПЧ отключена 1 1 Система ФАПЧ активна и подключена к микроконтроллеру в качестве основного источника синхронизации Регистр подачи ФАПЧ (PLLFEED - 0xE01FC08C) Битовая структура регистра PLLFEED приведена в Табл. 4.16. Модифицированные программой значения регистров PLLCON и PLLCFG вступают в силу лишь после выработана корректной последовательности ввода данных («подачи») в ФАПЧ. Эта последовательность, которая должна быть за- писана в регистр PLLFEED, выглядит следующим образом: 1. Записать значение ОхАА в регистр PLLFEED. 2. Записать значение 0x55 в регистр PLLFEED. Эти две процедуры записи должны следовать друг за другом и занимать пос- ледовательные шинные циклы VPB. Последнее требование подразумевает, что на время проведения операции ввода данных в ФАПЧ все прерывания должны быть запрещены. Если записываемые в регистр подачи значения некорректны или хотя бы одно из вышеназванных условий не выполняется, никакие измене- ния регистров PLLCON и PLLCFG в силу не вступят. Таблица 4.16. Биты регистра подачи ФАПЧ (PLLFEED — 0xE01FC08C) Номер бита Название бита Функция бита Значение после сброса 7:0 PLLFEED Последовательность подачи (ввода данных) ФАПЧ должна быть записана в этот регистр, чтобы модифицированные зна- чения регистра конфигурации и регистра управления ФАПЧ вступили в силу Неопреде- ленное 4.7.4. Система ФАПЧ и режим Power Down Переход в режим Power Down автоматически выключает ФАПЧ и отключает ее от микроконтроллера. «Пробуждение» из режима Power Down не влечет за собой автоматического восстановления параметров настройки ФАПЧ, поэтому это восстановление должно быть сделано пользовательской программой. Как правило, пишется специальная подпрограмма, чтобы активизировать ФАПЧ, дождаться замыкания ее петли, а затем подключить ФАПЧ к микроконтролле- ру. Эту подпрограмму можно вызывать в начале любого программного блока обработки прерывания, которому передается управление после «пробуждения».
4.7. Встроенная система ФАПЧ 87 Не следует пытаться перезапускать систему ФАПЧ после пробуждения из режи- ма Power Down просто путем выработки корректной последовательности пода- чи (ввода данных) ФАПЧ с текущим содержимым управляющих регистров. Не- обходимо полностью произвести включение ФАПЧ и подключение ее к микро- контроллеру, после чего следует дождаться замыкания петли ФАПЧ. 4.7.5. Вычисление частоты ФАПЧ Формулы получения частоты системы ФАПЧ используют следующие пара- метры: • Fosc — частота стабилизированного кварцем генератора; • Fcco — частота генератора, управляемого током ФАПЧ; • cclk — выходная частота ФАПЧ, она же тактовая частота процессора; • М — множитель, задаваемый значениями битов MSEL регистра PLLCFG; • Р — коэффициент деления, задаваемый значениями битов PSEL регистра PLLCFG. Выходная частота ФАПЧ (когда ФАПЧ активна и подключена к микроконт- роллеру) определяется по формуле: cclk = М х Fosc или cclk = Fcco/(2xP). Частота ССО может быть вычислена по формуле: FCco = сс1к х 2 х Р или Fcco = Fosc X М X 2 X Р. Входные сигналы и параметры настройки ФАПЧ должны удовлетворять следующим условиям: • значение Fosc должно находится в диапазоне 10...25 МГц; • значение cclk должно находится в диапазоне 10 МГц...Ртах, где Fmax — максимально допустимая тактовая частота для конкретного микроконт- роллера семейства LPC2000; • значение Fcc0 должно находится в диапазоне 156...320 МГц. 4.7.6. Процедура настройки параметров системы ФАПЧ Если конкретное приложение использует ФАПЧ, то ее конфигурация может быть задана следующим образом: 1. Выбрать желаемую тактовую частоту процессора (cclk). Этот выбор может быть основан на требованиях приложения к производительности процессо- ра, а также должен учитывать необходимость поддержания заданного набо- ра стандартных скоростей универсального асинхронного приемопередатчи- ка (UART), если он используется в приложении и т. д. При выборе cclk следует иметь в виду, что периферийные устройства могут тактироваться сигналом с частотой, меньшей тактовой частоты процессора (см. описание делителя VPB далее в этой главе).
88 Глава 4. Блок управления системой 2. Выбрать такую частоту генератора (Fosc), чтобы частота cclk нацело делилась на Fosc. 3. Вычислить значение множителя М с тем, чтобы сконфигурировать биты MSEL в соответствии с формулой М = cclk / Fosc. Значение М должно ле- жать в диапазоне 1...32. Значение, записываемое в биты MSEL регистра PLLCFG, определяется как (М - 1), см. Табл. 4.17. 4. Найти значение коэффициента деления Р с тем, чтобы сконфигурировать биты PSEL. Оно должно быть таким, чтобы соответствующее ему значение Fcco не выходило за пределы, указанные для Fcco в предыдущем разделе. Зна- чение Fcco рассчитывается с использованием формулы из предыдущего раз- дела. Найденное значение Р должно быть равно 1, 2, 4 или 8. Значение, за- писываемое в биты PSEL регистра PLLCFG, равно 00 для Р = 1, равно 01 для Р =2, равно 10 для Р = 4 и равно 11 для Р = 8 (см. Табл. 4.18). Таблица 4.17, Значения множителя ФАПЧ Биты MSEL (PLLCFG биты 4:0) Значение М 00000 1 00001 2 00010 3 00011 4 НПО 31 11111 32 Таблица 4.18. Значения коэффициента деления программируемого делителя ФАПЧ Биты PSEL (PLLCFG биты 6:5) Значение Р 00 1 01 2 10 4 11 8 4.7.6.1. Пример настройки параметров системы ФАПЧ Пусть для проектируемой системы задано Fosc =10 МГц и требуется получить производительность процессора, соответствующую величине cclk = 60 МГц. Вычисляем М = cclk / Fosc = 60 МГц / 10 МГц = 6. Следовательно, в биты ре- гистра PLLCFG 4:0 будет записано значение (М - 1) = 5. Значение Р может быть получено как Р = Fcco / (cclk х 2), учитывая требование, что значение Fcco должно лежать в диапазоне 156...320 МГц. Для самого низкого разрешенного значения Fcco = 156 МГц имеем Р = 156 МГц / (2 х 60 МГц) = 1.3. Для самого высокого разрешенного значения Fcco имеем Р = 320 МГц / (2 х 60 МГц) = 2.67. Единственное значение Р из Табл. 4.18, лежащее в полученном диапазоне, равно 2. Следовательно, в биты PLLCFG 6:5 будет запи- сано значение (Р - 1) = 1. 4.8. Управление потребляемой мощностью Микроконтроллеры семейства LPC2000 поддерживают два режима пони- женного энергопотребления: Idle Mode и Power Down. В режиме Idle Mode вы- полнение команд приостановлено, однако сброс и прерывания разрешены. Пе-
4.8. Управление потребляемой мощностью 89 риферийные устройства продолжают функционировать и могут генерировать прерывания, которые заставят процессор возобновить выполнение программы. В режиме Idle Mode уменьшается до нуля мощность, потребляемая непосредс- твенно процессором, а также системами памяти, связанными с ними контрол- лерами и внутренними шинами. В режиме Power Down тактовый генератор остановлен, и микроконтроллер не получает никаких сигналов синхронизации. Состояние процессора и его ре- гистров, а также регистров периферийных устройств и содержимое SRAM со- храняются неизменными. Также сохраняются логические уровни на выводах микроконтроллера. Выход из режима Power Down в режим нормального выпол- нения программы может быть произведен путем сброса или с использованием определенных прерываний, которые могут генерироваться даже при отсутствии синхросигнала. Так как все динамические операции в микроконтроллере при- остановлены, потребляемая им мощность в режиме Power Down уменьшается практически до нуля. Включение режимов Idle Mode и Power Down должно быть скоордини- ровано с выполнением программы. «Пробуждение» из режимов Idle Mode и Power Down через прерывание возобновляет выполнение программы таким образом, что не происходит потери каких-либо команд, их неполного или повторного выполнения. «Пробуждение» из режима Power Down с исполь- зованием сторожевого таймера микроконтроллера мы обсудим несколько позже. Управление потребляемой мощностью периферийных устройств микрокон- троллера LPC2000 организовано таким образом, чтобы обеспечивать возмож- ность индивидуального отключения периферийных устройств, если они не ис- пользуются в пользовательском приложении. Это позволяет снизить непроиз- водительное энергопотребление системы. 4.8.1. Описание регистров Управление потребляемой мощностью осуществляется с помощью двух ре- гистров, как следует из Табл. 4.19. Их детальные описания даны ниже. Таблица 4.19. Регистры управления потребляемой мощностью Адрес Название Описание Доступ OxEOlFCOCO PCON Регистр управления потребляемой мощностью. Этот регистр содержит служебные биты, которые разрешают переход в два режима пониженного энергопотребления LPC2000 (см. Табл. 4.20) R/W 0xE01FC0C4 PCONP Регистр управления потребляемой мощностью для пе- риферийных устройств. Этот регистр содержит служеб- ные биты, включающие и отключающие периферий- ные функции индивидуально. Тем самым, можно свести к нулю энергопотребление тех периферийных устройств, которые не требуются в пользовательском приложении R/W
90 Глава 4, Блок управления системой Регистр управления потребляемой мощностью (PCON — ОхЕО1 FCOCO) Битовая структура регистра PCON на примере микроконтроллеров LPC2119/29/94 и LPC2292/94 приведена в Табл. 4.20. Регистр PCON содер- жит два бита. Запись ВЫСОКОГО уровня в соответствующий бит вызывает переход микроконтроллера в режим Power Down или режим Idle mode. Ес- ли установлены оба бита, то микроконтроллер находится в режиме Power Down. Таблица 4.20. Биты регистра управления потребляемой мощностью на примере микроконтроллеров LPC2119/29/94 и LPC2292/94 (PCON - OxEOlFCOCO) Номер бита Название бита Функция бита Значение после сброса 0 IDL Установка этого бита переводит микроконтроллер в режим Idle mode и останавливает тактирование процессора, в то время как встроенные периферийные устройства остаются активными. Любое разрешенное прерывание от периферийного устройства или внешнее прерывание заставит процессор возобновить выполнение программы 0 1 PD Установка этого бита переводит микроконтроллер в режим Power Down, останавливает тактирование процессора и всех встроенных периферийных устройств. «Пробуждение» от внешнего прерывания перезапустит тактовый генератор, сбросит бит PD и процессор возобновит выполнение программы 0 7:2 Зарезер- вированы Пользовательское программное обеспечение не должно производить запись в зарезервированные биты. Чтение зарезервированного бита возвращает неопределенное значение NA Регистр управления потребляемой мощностью периферийных устройств (PCONP - 0xE01FC0C4) Битовая структура регистра PCONP на примере микроконтроллеров LPC2119/29/94 и LPC2292/94 приведена в Табл. 4.21, Табл. 4.22. Регистр PCONP позволяет отключать те или иные периферийные функции, чтобы уменьшить потребляемую мощность. Некоторые периферийные функции не могут быть отключены (сторожевой таймер, GPIO, блок коммутации выводов и блок управления системой). Каждый бит в регистре PCONP «управляет» одним из периферийных устройств. Номера битов соответствуют связанным с ними периферийным устройствым, которые перечислены в таблице VPB периферий- ных устройств (см. Табл. 2.1...Табл. 2.5).
4.8. Управление потребляемой мощностью 91 Таблица 4.21. Биты регистра управления потребляемой мощностью периферийных устройств на примере микроконтроллеров LPC2119/29 и LPC2292 (PCONP - 0xE01FC0C4) Номер бита Название бита Функция бита Значение после сброса 0 Зарезер- вирован Пользовательское программное обеспечение не должно произво- дить запись в зарезервированные биты. Чтение зарезервированного бита возвращает неопределенное значение 0 1 PCTIM0 Когда этот бит установлен, разрешается работа TIMER0. Когда этот бит сброшен, TIMER0 заблокирован и не потребляет мощности 1 2 PCTIM1 Когда этот бит установлен, разрешается работа TIMER1. Когда этот бит сброшен, TIMER1 заблокирован и не потребляет мощности 1 3 PCURT0 Когда этот бит установлен, разрешается работа UART0. Когда этот бит сброшен, UART0 заблокирован и не потребляет мощности 1 4 PCURT1 Когда этот бит установлен, разрешается работа UART1. Когда этот бит сброшен, UART1 заблокирован и не потребляет мощности 1 5 PCPWM0 Когда этот бит установлен, разрешается работа PWM0. Когда этот бит сброшен, PWM0 заблокирован и не потребляет мощности 1 6 Зарезер- вирован Пользовательское программное обеспечение не должно произво- дить запись в зарезервированные биты. Чтение зарезервированного бита возвращает неопределенное значение 0 7 PCI2C Когда этот бит установлен, разрешается работа интерфейса 12С. Когда этот бит сброшен, интерфейс 12С заблокирован и не потреб- ляет мощности 1 8 PCSPI0 Когда этот бит установлен, разрешается работа интерфейса SPIO. Когда этот бит сброшен, интерфейс SPIO заблокирован и не потреб- ляет мощности 1 9 PCRTC Когда этот бит установлен, разрешается работа модуля реального времени RTC. Когда этот бит сброшен, модуль RTC заблокирован и не потребляет мощности 1 10 PCSPI1 Когда этот бит установлен, разрешается работа интерфейса SPI1. Когда этот бит сброшен, интерфейс SPI1 заблокирован и не потреб- ляет мощности 1 11 Зарезер- вирован Пользовательское программное обеспечение не должно произво- дить запись в зарезервированные биты. Чтение зарезервированного бита возвращает неопределенное значение 1 12 PCAD Когда этот бит установлен, разрешается работа модуля АЦП. Когда бит сброшен, модуль АЦП заблокирован и не потребляет мощности 1 13 PCCAN1 Когда этот бит установлен, разрешается работа контроллера CAN1. Когда этот бит сброшен, контроллер CAN 1 заблокирован и не пот- ребляет мощности. Примечание. Работа приемного фильтра разрешена, если разрешена работа любого из контроллеров CAN (1 или 2). 1 14 PCCAN2 Когда этот бит установлен, разрешается работа контроллера CAN2. Когда этот бит сброшен, контроллер CAN2 заблокирован и не пот- ребляет мощности 1 31:15 Зарезер- вированы Пользовательское программное обеспечение не должно произво- дить запись в зарезервированные биты. Чтение зарезервированного бита возвращает неопределенное значение NA
92 Глава 4. Блок управления системой Таблица 4,22. Биты регистра управления мощностью периферийных устройств на примере микроконтроллеров LPC2194 и LPC2294 (PCONP - 0xE01FC0C4) Номер бита Название бита Функция бита Значение после сброса 0 Зарезер- вирован Пользовательское программное обеспечение не должно произво- дить запись в зарезервированные биты. Чтение зарезервированного бита возвращает неопределенное значение 0 1 PCTIM0 Когда этот бит установлен, разрешается работа TIMER0. Когда этот бит сброшен, TIMER0 заблокирован и не потребляет мощности 1 2 PCTIM1 Когда этот бит установлен, разрешается работа TIMER1. Когда этот бит сброшен, TIMER1 заблокирован и не потребляет мощности 1 3 PCURT0 Когда этот бит установлен, разрешается работа UART0. Когда этот бит сброшен, UART0 заблокирован и не потребляет мощности 1 4 PCURT1 Когда этот бит установлен, разрешается работа UART1. Когда этот бит сброшен, UART1 заблокирован и не потребляет мощности 1 5 PCPWM0 Когда этот бит установлен, разрешается работа PWM0. Когда этот бит сброшен, PWM0 заблокирован и не потребляет мощности 1 6 Зарезер- вирован Пользовательское программное обеспечение не должно произво- дить запись в зарезервированные биты. Чтение зарезервированного бита возвращает неопределенное значение 0 7 PCI2C Когда этот бит установлен, разрешается работа интерфейса 12С. Когда этот бит сброшен, интерфейс 12С заблокирован и не потреб- ляет мощности 1 8 PCSPI0 Когда этот бит установлен, разрешается работа интерфейса SPI0. Когда этот бит сброшен, интерфейс SPI0 заблокирован и не пот- ребляет мощности 1 9 PCRTC Когда этот бит установлен, разрешается работа модуля реального времени RTC. Когда этот бит сброшен, модуль RTC заблокирован и не потребляет мощности 1 10 PCSPI1 Когда этот бит установлен, разрешается работа интерфейса SPI1. Когда этот бит сброшен, интерфейс SPI1 заблокирован и не пот- ребляет мощности 1 11 РСЕМС Когда этот бит установлен, разрешается работа контроллера вне- шней памяти ЕМС. Когда этот бит сброшен, ЕМС заблокирован и не потребляет мощности 1 12 PCAD Когда этот бит установлен, разрешается работа модуля АЦП. Когда этот бит сброшен, модуль АЦП заблокирован и не потребляет мощ- ности 1 13 PCCAN1 Когда этот бит установлен, разрешается работа контроллера CAN1. Когда этот бит сброшен, контроллер CAN 1 заблокирован и не пот- ребляет мощности 1 14 PCCAN2 Когда этот бит установлен, разрешается работа контроллера CAN2. Когда этот бит сброшен, контроллер CAN2 заблокирован и не пот- ребляет мощности 1 15 PCCAN3 Когда этот бит установлен, разрешается работа контроллера CAN3. Когда этот бит сброшен, контроллер CAN3 заблокирован и не пот- ребляет мощности 1 16 PCCAN4 Когда этот бит установлен, разрешается работа контроллера CAN4. Когда этот бит сброшен, контроллер CAN4 заблокирован и не пот- ребляет мощности 1 31:17 Зарезер- вированы Пользовательское программное обеспечение не должно произво- дить запись в зарезервированные биты. Чтение зарезервированного бита возвращает неопределенное значение 0
4.9. Системный сброс 93 4.8.2. Рекомендации по использованию управления потребляемой мощностью Сразу после сброса микроконтроллера в регистре PCONP содержатся зна- чения, которые разрешают работу всех управляемых этим регистром интерфей- сов и периферийных устройств. По этой причине пользовательскому приложе- нию нет необходимости модифицировать содержимое PCONP, кроме случая, когда какое-либо периферийное устройство в приложении не используется и его можно отключить, в целях экономии потребляемой мощности. В регистре PCONP должны быть установлены только биты, соответствующие периферий- ным устройствам, которые действительно используются в приложении. Все другие биты, в том числе зарезервированные, должны быть сброшены. 4.9. Системный сброс Для микроконтроллеров семейства LPC2000 предусмотрено два источника сброса: вход внешнего сброса RESET и сброс от сторожевого таймера. Вход RESET имеет встроенный триггер Шмитта, который играет роль дополнитель- ного фильтра помех. После сброса от любого из указанных источников сразу же запускается встроенный таймер «пробуждения» (см. описание таймера «про- буждения» в этой главе). Активный уровень сигнала сброса должен удерживать- ся до окончания счета этого таймера. Когда тактовый генератор вырабатывает заданное количество тактовых импульсов, подсчитанных таймером «пробужде- ния», сигнал сброса поступает в контроллер Flash-памяти, производя его ини- циализацию. На Рис. 4.5 изображена функциональная схема внутренних логических це- пей сигнала сброса, на которой отображены связи между цепями сброса, гене- ратором и таймером пробуждения. Фильтр помех в цепи сброса позволяет мик- роконтроллеру игнорировать внешние импульсы сброса, длительность которых недостаточна, а также задать минимальную длительность импульса RESET, ко- торый должен быть подан на одноименный вход, чтобы гарантировать сброс ус- тройства. Такая схема организации сброса применена производителем с целью обеспечения стабильной генерации тактового генератора и получения устойчи- вой тактовой частоты на выводе XI LPC2000. Предполагается, что для достиже- ния такой стабильности активный уровень сигнала сброса после включения пи- тания микроконтроллера должен удерживаться на входе RESET не менее 10 мс. Для всех последующих сбросов, когда тактовый генератор уже находится в ре- жиме устойчивой генерации и на входе XI присутствуют стабильные тактовые импульсы, минимальная длительность сигнала сброса составляет 300 нс. Как правило, к наличию и значениям питающих напряжений на выводах питания микроконтроллера (V18, V3, VJ8A и V3A) не предъявляется особых требо- ваний. Однако для осуществления корректного сброса необходимо подать за- данное напряжение на вывод V18, поскольку цепи сброса, тактовый генератор и другие аппаратные средства, участвующие в сбросе, питаются от этого напря- жения. Вывод V3 обеспечивает питание (включение) интерфейса микроконт- роллера через цифровые линии ввода/вывода. Таким образом, отсутствие пита- ющего напряжения на выводе V3 не затронет последовательность сброса непос- редственно, но заблокирует связь микроконтроллера с внешним миром.
94 Глава 4. Блок управления системой Сброс от сторожевого таймера Внешний сброс Power Down Сброс «обвязки» Flash Сброс PCON.PD Выход генератора (Fosc) Таймер «пробуждения» 1— Старт Пробуждение от EINT0 Пробуждение от EINT1 Пробуждение от EINT2 Пробуждение от EINT3 Пробуждение от CAN1 Пробуждение от CAN2 Пробуждение от CAN31) —Гр? Пробуждение от CAN41) --1 Сброс Счет 2П Запись«1» из VPB VPB- чтение из бита PD в PCON Fosc к ФАПЧ 1 > Только у LPC2194/2292/2294. Рис. 4.5. Функциональная схема внутренней логики сброса (на примере микроконтроллеров LPC2119/29/94 и LPC2292/94) После завершения процедуры внутреннего сброса, процессор микроконт- роллера приступает к выполнению программы с адреса 0, на который отобра- жен вектор сброса в загрузочном блоке. В этот момент сам процессор и перифе- рийные регистры инициализируются заданными (установленными по умолча- нию) значениями. Процедуры внешнего и внутреннего сброса имеют небольшие различия. При внешнем сбросе функции некоторых выводов автоматически переконфи- гурируются. При внутреннем сбросе этого не происходит, т.к. внешние цепи микроконтроллера, отвечающие за сброс, не могут отслеживать наступления состояния сброса и производить в этот момент переконфигурирование функ- ций выводов. При внешнем сбросе подвергаются переконфигурированию для различных целей следующие выводы: P1.20/TRACESYNC, P1.26/RTCK, ВООТ1 и ВООТО (см. главу 7 «Цоколевка и назначение выводов», главу 8 «Блок коммутации выводов» и главу 3 «Контроллер внешней памяти»). Вывод Р0.14 (см. главу 20 «Организация и программирование Flash-памяти») используется для нужд встроенного загрузчика при выполнении программного кода после за- вершения сброса. Поскольку сброс микроконтроллера, как правило, происходит случайным по времени образом, то возможно наступление сброса во время осуществления операций программирования или стирания встроенной Flash-памяти. В этом случае, контроллер Flash-памяти прервет указанные операции, и будет удержи- вать центральный процессор в состоянии сброса до тех пор, пока внутренние высокие напряжения программирования не будут сняты. 4.10. Делитель VPB Делитель VPB служит для того, чтобы задавать соотношение между такто- вой частотой процессора (cclk) и частотой, используемой для тактирования пе- риферийных устройства (pclk). Использование в микроконтроллере LPC2000 делителя VPB преследует две цели. Первая состоит в том, чтобы обеспечить периферийные устройства через шину VPB синхросигналом pclk такой частоты, чтобы они могли работать на
4.10. Делитель> КРБ 95 выбранной для процессора ARM скорости. Чтобы достигнуть этого, частота синхросигнала на шине VPB может быть снижена до значения 1/2 или 1/4 так- товой частоты процессора. Значение частоты синхросигнала шины VPB после сброса микроконтроллера составляет 1/4 тактовой частоты процессора (задано по умолчанию) и может быть затем изменено только через регистры управления VPB. Таким образом, гарантируется устойчивая работа шины VPB сразу при включении питания микроконтроллера. Вторая цель состоит в том, чтобы обеспечить возможность экономии пот- ребляемой мощности микроконтроллера, когда пользовательское приложение не предусматривает использования периферийных устройств, работающих на полной тактовой частоте процессора. Подключение делителя VPB к генератору и цепям тактирования процессора показано на Рис. 4.6. Поскольку делитель VPB связан с выходом системы ФАПЧ, то система ФАПЧ должна оставаться активной (если она вообще ис- пользуется) во время действия режима Idle mode. Кварцевый резонатор или _ внешний источник тактовой частоты (Fosc) ФАПЧ Тактовая частота процессора (cclk) VPB- делитель Тактовая частота VPB (cclk) Рис. 4.6. Подключение делителя VPB к цепям тактирования процессора Регистр VPBDIV (VPBDIV—OxEOlFClOO) Описание регистра VPBDIV приведено в Табл. 4.23. Битовая структура регистра VPBDIV приведена в Табл. 4.24. Регистр делителя VPB содержит два бита и позволяет задать три значения коэффициента деления, приведенные в Табл. 4.24. Таблица 4.23. Регистр делителя VPB VPBDIV Адрес Название Описание Доступ OxEOlFClOO VPBDIV Управляет значением тактовой частоты VPB, задаваемой от- носительно тактовой частоты процессора (cclk) R/W Таблица 4.24. Биты регистра делителя VPB (VPBDIV — OxEOlFClOO) Номер бита Название бита Функция бита Значение после сброса 1:0 VPBDIV В зависимости от состояния этих двух битов, частота синхросигнала VPB может принимать следующие значения: 00: Частота VPB равна 1/4 частоты тактового сигнала процессора. 01: Частота VPB равна частоте тактового сигнала процессора. 10: Частота VPB равна 1/2 частоты тактового сигнала процессора. 11: Зарезервировано. Запись этого значения в регистр VPBDIV не производится (т. е. сохраняется текущее значение битов VPBDIV) 0 3:2 Зарезерви- рованы Пользовательское программное обеспечение не должно произво- дить запись в зарезервированные биты. Чтение зарезервированного бита возвращает неопределенное значение 0
96 Глава 4. Блок управления системой Таблица 4.24. Биты регистра делителя VPB (VPBDIV — OxEOlFClOO) (продолжение) Номер бита Название бита Функция бита Значение после сброса 5:4 XCLKDIV В микроконтроллерах LPC2000 с 144-выводным корпусом эти биты управляют синхросигналом, который формируется внутренний ло- гической схемой микроконтроллера и может подаваться на вывод A23/XCLK. В зависимости от состояния этих двух битов, частота синхросигнала может принимать следующие значения: 00: Частота XCLK равна 1/4 частоты тактового сигнала процессора. 01: Частота XCLK равна частоте тактового сигнала процессора. 10: Частота XCLK равна 1/2 частоты тактового сигнала процессора. 11: Зарезервировано. Запись этого значения в регистр VPBDIV не производится (т. е. сохраняется текущее значение битов XCLKDIV). Рабочая в данный момент функция вывода A23/XCLK определяется состоянием соответствующего бита регистра PINSEL2 (см. главу 8«Блок коммутации выводов»). Примечание. Если значения битов XCLKDIV и VPBDIV совпадают друг с другом, то один и тот же синхросигнал используется для VPB и XCLK. (Это может быть полезно для внешней логики, взаимодейс- твующей с периферийными устройствами VPB.) 0 7:6 Зарезерви- рованы Пользовательское программное обеспечение не должно произво- дить запись в зарезервированные биты. Чтение зарезервированного бита возвращает неопределенное значение 0 4.11. Таймер «пробуждения» Назначение таймера «пробуждения» состоит в том, чтобы гарантировать, что тактовый генератор и другие необходимые для осуществления внутренних операций микроконтроллера встроенные аналоговые схемы полностью выйдут на свои рабочие режимы прежде, чем процессору будет разрешено выполнять команды. Таймер «пробуждения» используется в следующих случаях: при вклю- чении питания микроконтроллера, при любом сбросе, а также после отключе- ния (по той или иной причине) любой из вышеупомянутых аналоговых схем. Таймер «пробуждения» используется также при любом «пробуждении» микро- контроллера из режима Power Down, так как в этом режиме генератор и другие функции отключены. Таймер «пробуждения» контролирует работу стабилизированного кварцем генератора, определяя, безопасно ли для микроконтроллера приступить к вы- полнению программы. Когда производится включение питания или микрокон- троллера, по какой-либо причине, «пробуждается» из режима Power Down, тре- буется некоторое время, чтобы вырабатываемый генератором синхросигнал до- стиг амплитуды, достаточной для тактирования логических схем синхронизации микроконтроллера. Это время зависит от многих факторов: времени нарастания питающего напряжения VDD (при включении питания), типа кварцевого резонатора и его электрических характеристик или, в случае использования иных внешних схем задания частоты (например, конденсато- ров), — их характеристик, а также характеристик самого генератора при задан- ных условиях окружающей среды. Обнаружив наличие в системе сигнала синхронизации требуемой частоты, таймер «пробуждения» отсчитывает 4096 импульсов, а затем разрешает инициа- лизацию Flash-памяти. После завершения инициализации Flash-памяти и при условии снятия сигнала внешнего сброса, процессор готов выполнять команды. Если в системе используется внешний источник тактирования (вместо кварце- вого резонатора, подключаемого к выводам генератора), имеется возможность
4.11. Таймер «пробуждения» 97 свести к минимуму или вовсе исключить задержку таймера «пробуждения» пос- ле появления синхроимпульсов. Таким образом, наличие таймера пробуждения гарантирует, что любые узлы и модули микроконтроллера будут функциониро- вать в рабочих режимах до начала выполнения программы. Микроконтроллеры семейства LPC2000 не имеют в своем составе аналого- вых функциональных модулей, способных работать без сигналов синхрониза- ции (например, компараторов), а также независимых источников синхросигна- лов, например, отдельного генератора сторожевого таймера. Исключение со- ставляют те микроконтроллеры LPC2000, у которых модуль часов-календаря реального времени (RTC) тактируется от подключаемого к выводам RTCX1-2 отдельного генератора с внешним кварцевым резонатором на частоту 32768 Гц. Только две встроенные периферийные функции способны работать при отсутс- твии источника синхронизации — это внешние прерывания (EINTO, EINT1, EINT2 и EINT3) и CAN-контроллеры. В случае, когда разрешено «пробужде- ние» устройства от внешнего прерывания и происходит событие, вызывающее это прерывание, начинается цикл «пробуждения» генератора. Аналогично, цикл «пробуждения» генератора начинается, если разрешено «пробуждение» микроконтроллера от сигналов CAN и соответствующие сигналы появляются на шине CAN. Фактически, микроконтроллер реагирует на любое прерывание после того, как истекает время «пробуждения» и произведена обработка этого прерывания контроллером VIC. Для того, чтобы обеспечить возможность вывода микроконтроллера из ре- жима Power Down с помощью других периферийных устройств, производите- лем был разработан механизм мультиплексирования выводов микроконтролле- ров семейства LPC2000 (см. главу 7 «Цоколевка и назначение выводов», главу 8 «Блок коммутации выводов»). Можно разрешать прерывания от событий, отно- сящихся к UART0 или UART1, SPIO или SPI1, либо I2C, назначая соответству- ющим выводам микроконтроллера следующие альтернативные функции: RxDO/EINTO, SDA/EINT1, SSEL0/EINT2, RxDl/EINT3, DCD1/EINT1, RI1/EINT2, SSEL1/EINT3. Прежде чем перевести микроконтроллер в режим Power Down, программа пользователя должна обеспечить включение соответствующих функций или интерфейсов, задать необходимые альтернативные функции выводов, выбрать корректные режим и полярность для прерывания При «пробуждении», пре- жние функции тех или иных выводов могут быть восстановлены программно. При работе с пользовательским приложением, возможна ситуация, когда «пробуждение» микроконтроллера осуществляется активным НИЗКИМ уров- нем внешнего сигнала на одной из линий шины. Если один канал EINTi ис- пользуется совместно несколькими выводами микроконтроллера, а «пробужде- ние» из режима Power Down требуется обеспечить по активному уровню на ка- ком-то одном из этих выводов, для данного канала следует задать режим чувствительности к НИЗКОМУ уровню внешнего сигнала. Лишь в этом режи- ме сигналы на соответствующих линиях шины будут объединены по функции логического ИЛИ (OR) и использованы для «пробуждения» микроконтроллера. Недостаток такого подхода заключается в том, что требуется фиксировать со- стояние шины или линии, которая вызвала «пробуждение», на интервал време- ни, необходимый для стабилизации работы генератора. В режиме Idle mode внутренние цепи, связанные с приемом внешних сигна- лов, отключены. 304
ГЛАВА 5 МОДУЛЬ АКСЕЛЕРАТОРА ПАМЯТИ (МАМ) 5.1. Описание При описании встроенного в микроконтроллеры LPC2000 модуля акселера- тора памяти (Memory Accelerator Module — МАМ) производитель оперирует терминами «выборка» и «выборка (выбор) с упреждением». Под термином «вы- борка» здесь будет пониматься обращение процессора ARM к Flash-памяти для чтения. Под термином «выборка с упреждением» будет пониматься такое обра- щение к Flash-памяти для чтения, когда адрес обращения задает не ARM, а не- посредственно логическая схема МАМ. Модуль акселератора памяти (МАМ) введен производителем в состав мик- роконтроллеров семейства LPC2000 с целью ускорить процесс выполнения программ, записанных во встроенной Flash-памяти. Во время выполнения цен- тральным процессором текущей команды пользовательской программы, МАМ производит выборку следующей по порядку команды ARM, обеспечивая тем самым бесперебойность выборки команд процессором. Функция акселератора памяти состоит в том, чтобы разбить Flash-память на два банка, к каждому из которых возможен независимый доступ. Каждый из этих банков Flash-памяти имеет свой собственный буфер выборки с упреждением и буфер ветвления. Раз- мер буфера выборки с упреждением, в случае проведения инициализированно- го МАМ цикла выборки с упреждением, составляет одну строку (128 бит) про- граммного кода, загруженного из соответствующего банка Flash-памяти. Раз- мер буфера ветвления каждого из двух банков составляет две строки программного кода (2x128 бит) из Flash-памяти в случае, если выбранная ко- манда не совпадает с содержимым ни одного из буферов выборки с упреждени- ем, а является командой перехода, для которой выбор с упреждением не был инициализирован. При каждом обращении к Flash-памяти в модуль МАМ из банка памяти за- гружается строка программного кода, состоящая из четырех 32-битных команд ARM или восьми 16-битных команд THUMB. Во время последовательного вы- полнения этих команд из другого банка Flash-памяти осуществляется предва- рительная выборка следующей по порядку строки текста программы. После вы- полнения последней команды в текущей 128-битной строке текста программы из банка Flash-памяти, который содержал эту строку, производится выборка очередной строки. Временные характеристики операций чтения Flash-памяти будут приведены ниже в данной главе. Ветвления и другие изменения процесса выполнения программы вызывают перерыв в последовательном потоке вызовов команд. Ветвление (переход) на- зад указывает, с большой вероятностью, на наличие программного цикла. Это значит, что очередная запрошенная команда может уже содержаться в буферах
5.2, Состав модуля акселератора памяти 99 ветвления. В таком случае, для выполнения программы нет необходимости проводить щикл чтения Flash-памяти. При переходе вперед также существует некоторая вероятность, что новый адрес уже содержится в одном из буферов выборки с упреждением. В таком случае, и этот переход будет произведен без задержки. Если требуется осуществить программный переход к команде, отсутствую- щей в одном из буферов ветвления или буферов выборки с упреждением, то не- обходимо произвести один цикл чтения Flash-памяти и загрузить буфера ветв- ления. В связи с этим, произойдет задержка выборки. При дальнейшем выпол- нении программы никаких задержек выборки не будет, пока в программном коде не встретится очередная подобная команда (так называемая выпадающая команда). Контроллер Flash-памяти обнаруживает попытку доступа для чтения дан- ных из Flash-памяти и для сохранения результатов чтения использует отде- льный буфер. Способ, которым это реализуется, подобен описанному выше процессу выборки программного кода, что позволяет осуществлять более быст- рый доступ к данным, если к ним обращаются последовательно. Упомянутый отдельный буфер (буфер отдельной строки), в отличие от предназначенных для доступа к программному коду буферов банков Flash-памяти, предназначен для доступа к собственно данным. При этом функция выборки с упреждением от- сутствует. 5.2. Состав модуля акселератора памяти Модуль акселератора памяти состоит из нескольких функциональных бло- ков: • фиксатор адреса Flash-памяти для каждого банка. Эта функция связана с банком 0 фиксации адреса; • два банка Flash-памяти; • фиксаторы (защелки) кода команды, фиксаторы (защелки) данных, фик- саторы (защелки) сравнения адреса; • логические схемы ожидания. На Рис. 5.1 изображена упрощенная блок-схема продвижения данных в мо- дуле МАМ. Рис. 5.1. Блок-схема продвижения данных в модуле МАМ
100 Глава 5. Модуль акселератора памяти (МАМ) 5.3. Банки Flash-памяти В микроконтроллерах LPC2000 имеются два встроенных банка Flash-памя- ти, доступ к которым осуществляется параллельно и независимо. Такая структу- ра позволяет устранить задержки при последовательном доступе к Flash-памяти. Операции программирования Flash-памяти не управляются модулем аксе- лератора памяти (МАМ), а реализованы как отдельная функция микроконтрол- лера. Сектор памяти, именуемый в документации производителя «загрузочным блоком», содержит алгоритмы программирования Flash-памяти, которые мож- но вызывать как части прикладной пользовательской программы. Кроме того, эти алгоритмы могут выполняться с целью реализовать последовательное (внутрисхемное) программирование. Каждый сектор Flash-памяти в микрокон- троллерах LPC2000 определен в обоих банках таким образом, чтобы операция стирания сектора происходила в обоих банках одновременно. Необходимо отметить, что структура с двумя банками Flash-памяти являет- ся «прозрачной» по отношению к функциям программирования и не создает каких-либо проблем с точки зрения пользователя. 5.4. Защелки команд и защелки данных Операции доступа к программному коду и к данным обрабатываются моду- лем акселератора памяти (МАМ) раздельно. В нем имеется два 128-битных фик- сатора (защелки) команд по и 12-битный фиксатор (защелка) сравнения адреса, связанные с каждым банком Flash-памяти. Один из двух таких наборов защелок, называемых буфером ветвлений (переходов), содержит данные и адрес сравне- ния для последней «выпадающей команды», находящейся в соответствующем банке. Другой набор защелок, называемый буфером выборки с упреждением, содержит данные и адрес сравнения для команд, выбранных с упреждением, т. е. таких, которые с большой вероятностью будут выполняться процессором ARM, но выполнение которых еще не началось. Каждая защелка команд содержит 4 слова программного кода (4 команды ARM, или 8 команд THUMB). Аналогично, для организации цикла доступа к данным в модуле МАМ ис- пользуются 128-битная защелка данных и 13-битный фиксатор адреса данных. Этот набор защелок является общим для обоих банков Flash-памяти. Каждая попытка доступа к данным, отсутствующим в защелке, влечет за собой выборку из Flash-памяти 4 слов данных, которые фиксируются в защелке данных. Это дает значительное ускорение при доступе к данным, расположенным по после- довательным адресам, но имеет незначительный эффект при доступе к данным, расположенным по произвольным адресам. 5.5. Проблемы программирования Flash-памяти Поскольку во время проведения операций программирования и стирания Flash-памяти доступ к ней запрещен, необходимо, чтобы модуль МАМ мог бы ка- ким-то образом «информировать» центральный процессор о возникновении по- добной ситуации. (В процессорном ядре ARM7TDMI-S таким индикатором яв- ляется наличие йа внутренней шине сигнала CLKEN.) При некоторых условиях, задержка доступа к Flash-памяти может привести к временной приостановке ра- боты (time-out) сторожевого таймера. Пользователь должен учитывать такую воз- можность и предпринимать шаги к тому, чтобы нежелательный сброс от стороже- вого таймера не привел к сбою программирования или стирания Flash-памяти.
5.6. Режимы работы модуля акселератора памяти 101 Содержимое защелок МАМ автоматически сбрасывается в начале любой операции программирования или стирания Flash-памяти. Таким образом, ис- ключается возможность ошибочного помещения в защелки устаревших (недос- товерных) данных. Любое последующее обращение по адресу Flash-памяти инициирует новую выборку, которая будет осуществлена после завершения операции программирования или стирания Flash-памяти. 5.6. Режимы работы модуля акселератора памяти Модуль МАМ имеет три режима работы, различающиеся степенью исполь- зования модуля и уровнем «предсказуемости» при обращениях процессорного ядра ARM к Flash-памяти: Режим 0. Модуль МАМ не используется. Все запросы к памяти приводят к опе- рации чтения Flash-памяти (см. сноску 2 к Табл. 5.1). Выборка команд с уп- реждением отсутствует. Таблица 5.1. Функционирование модуля МАМ Ъ«п запроса к памяти программ Режим МАМ 0 1 2 При различных типах доступа к командам программы Последовательный доступ, данные в защелках МАМ Производится выбор- ка из Flash-памяти2' Использование защелки данных1 > Использование защелки данных1) Последовательный доступ, данные не в защелках МАМ Производится выбор- ка из Flash-памяти Производится выбор- ка из Flash-памяти1' Производится выбор- ка из Flash-памяти1' Непоследовательный доступ, данные в защелках МАМ Производится выбор- ка из Flash-памяти2' Производится выбор- ка из Flash-памяти1'’2) Использование защелки данных1) Непоследовательный доступ, данные не в защелках МАМ Производится выбор- ка из Flash-памяти Производится выбор- ка из Flash-памяти1' Производится выбор- ка из Flash-памяти1' При различных типах доступа к данным и прямого доступа к памяти (DMA) Последовательный доступ, данные в защелках МАМ Производится выбор- ка из Flash-памяти2' Производится выбор- ка из Flash-памяти2' Использование защелки данных Последовательный доступ, данные не в защелках МАМ Производится выбор- ка из Flash-памяти Производится выбор- ка из Flash-памяти Производится выбор- ка из Flash-памяти Непоследовательный доступ, данные в защелках МАМ Производится выбор- ка из Flash-памяти2' Производится выбор- ка из Flash-памяти2' Использование защелки данных Непоследовательный доступ, данные не в защелках МАМ Производится выбор- ка из Flash-памяти Производится выбор- ка из Flash-памяти Производится выбор- ка из Flash-памяти ° Выборка команд с упреждением производится в режимах 1 и 2. 2) Если требуемые данные уже находятся в защелках, модуль МАМ использует их, но доступ к данным через защелки производится за такое же время, как и чтение этих данных непосредс- твенно из Flash-памяти. Выгода такого подхода заключается только в экономии мощности. Модуль МАМ может быть отключен путем записи в биты 2:0 регистра MAMTIM значения 001, задающего длительность цикла обращения модуля МАМ к Flash-памяти равной одному пе- риоду импульсов тактовой частоты cclk.
102 Глава 5. Модуль акселератора памяти (МАМ) Режим 1. Модуль МАМ частично задействован. Производится выборка ко- манд с упреждением. То есть последовательный доступ к командам выпол- няется через наборы защелок, если эти команды в них имеются. В против- ном случае (попытка вызова команд, не следующих последовательно друг за другом) инициируется операция чтения Flash-памяти (см. сноску 2 к Табл. 5.1). Это означает, что все ветвления программы вызывают выборки непосредственно из Flash-памяти. Все операции с данными вызывают чте- ние Flash-памяти. Режим 2. Модуль МАМ полностью задействован. Производится выборка ко- манд с упреждением. Любое обращение к памяти (для считывания как кода команд, так и данных) выполняется как чтение содержимого защелки моду- ля МАМ, если требуемые команды или данные содержатся в одном из набо- ров защелок. Операции чтения Flash-памяти для доступа к коду команды или данным производятся только в том случае, если при текущем содержи- мом наборов защелок нельзя осуществить операции выборки кода или дан- ных с упреждением. 5.7. Конфигурация модуля акселератора памяти После сброса по умолчанию модуль МАМ отключен. Пользовательская программа может в любой момент включить или отключить реализуемое МАМ ускорение доступа к Flash-памяти. Это позволяет выполнять большинство при- ложений на самой высокой скорости, в то время как те или иные выбранные пользователем операции могут быть выполнены хоть и несколько медленнее, но за точно заданное время (если приложение этого требует). 5.8. Описание регистров модуля акселератора памяти Регистры МАМ перечислены в Табл. 5.2. Все регистры МАМ, независимо от их реального размера, определены в границах одного слова (32 бита). Подроб- ное описание каждого из регистров дано при описании работы соответствую- щей ему функции. Таблица 5.2. Регистры модуля МАМ Название Описание Доступ Значение после сброса1* Адрес MAMCR Регистр управления модулем акселератора па- мяти. Определяет функциональный режим МАМ, т. е. степень задействования МАМ R/W 0 OxEOlFCOOO MAMTIM Регистр управления тактированием модуля ак- селератора памяти. Определяет количество пе- риодов тактовых импульсов, используемое для выборок Flash-памяти (от 1 до 7 периодов так- товых импульсов процессора) R/W 0x07 0xE01FC004 ° Значение относится к данным, содержащимся только в используемых битах, и не включает содержимое зарезервированных битов.
5.8. Описание регистров модуля акселератора памяти 103 Регистр управления МАМ (MAMCR — OxEOlFCOOO) Битовая структура регистра MAMCR приведена в Табл. 5.3. Два бита конфигурации этого регистра задают три возможных режима МАМ. По умолчанию, после сброса функции МАМ заблокированы. При смене режима МАМ содержимое всех защелок сбрасывается, поэтому требуется про- извести новое чтение Flash-памяти. Таблица 5.3. Биты регистра управления МАМ (MAMCR — OxEOlFCOOO) Номер бита Название бита Функция бита Значение после сброса 1:0 Управление ре- жимом МАМ Эти биты определяют режим МАМ следующим образом: 00 — МАМ заблокирован; 01 — функции МАМ частично реализуются; 10 — функции МАМ полностью реализуются; 11 — зарезервировано 0 7:2 Зарезервированы Пользовательское программное обеспечение не должно производить запись в зарезервированные биты. Чтение заре- зервированного бита возвращает неопределенное значение NA Регистр управления тактирования МАМ (MAMTIM — 0xE01FC004) Битовая структура регистра MAMTIM приведена в Табл. 5.4. Регистр MAMTIM задает, сколько циклов частоты cclk потребуется модулю МАМ для выполнения операции обращения к Flash-памяти. Таким образом, можно согласовывать тактирование МАМ с тактированием процессора. Время обращения к Flash-памяти может составлять от 1 до 7 периодов тактовых им- пульсов. В случае автономного (независимого) тактирования МАМ, возмож- ность согласования с процессором по синхронизации отсутствует, и использо- вание МАМ позволяет разве что оптимизировать энергопотребление микро- контроллера. Таблица 5.4. Биты регистра управления тактированием МАМ (MAMTIM — 0xE01FC004) Номер бита Название бита Функция бита Значение после сброса 2:0 Управление дли- тельностью цик- ла МАМ Эти биты устанавливают продолжительность операций вы- борки из Hash-памяти для МАМ следующим образом: 000 — 0 — зарезервировано; 001 = 1 — цикл выборки МАМ длится 1 период тактовой час- тоты процессора (cclk); 010 = 2 — цикл выборки МАМ длится 2 периода тактовой частоты процессора (cclk); 011 = 3 — цикл выборки МАМ длится 3 периода тактовой частоты процессора (cclk); 100 = 4 — цикл выборки МАМ длится 4 периода тактовой частоты процессора (cclk); 101 = 5 — цикл выборки МАМ длится 5 периодов тактовой частоты процессора (cclk); 110 = 6 — цикл выборки МАМ длится 6 периодов тактовой частоты процессора (cclk); 111 = 7 — цикл выборки МАМ длится 7 периодов тактовой частоты процессора (cclk). Предупреждение. Некорректная установка этого значения может привести к неправильным операциям микроконтрол- лера. 0x07 7:3 Зарезервированы Пользовательское программное обеспечение не должно про- изводить запись в зарезервированные биты. Чтение зарезер- вированного бита возвращает неопределенное значение NA
104 Глава 5. Модуль акселератора памяти (МАМ) 5.9. Рекомендации по использованию модуля акселератора памяти Прежде чем изменять режим тактирования МАМ (длительность цикла об- ращения к Flash-памяти), МАМ необходимо отключить путем записи логичес- ких нулей в биты 1:0 регистра MAMCR. Затем в регистр MAMTIM следует за- писать новое значение. После этого, МАМ может быть включен снова путем за- писи (в соответствии с требуемым режимом) значений 1 или 2 в регистр MAMCR. Для системной тактовой частоты, меньшей 20 МГц, значение MAMTIM мо- жет быть равным 1. Для системной тактовой частоты, лежащей в диапазоне 20...40 МГц, рекомендуется значение MAMTIM, равное 2 (2 периода cclk), а для системной тактовой частоты, большей 40 МГц, рекомендуется установить зна- чение MAMTIM, равное 3 (3 периода cclk).
ГЛАВА 6 КОНТРОЛЛЕР ВЕКТОРОВ ПРЕРЫВАНИЙ (VIC) Входящий в состав всех устройств микроконтроллеров LPC2000 контроллер векторов прерываний (VIC) имеет следующие особенности: • архитектура ARM PrimeCell ™; • 32 входа запросов прерываний; • 16 векторов прерываний (IRQ); • 16 уровней приоритета, динамически назначаемых запросам прерываний; • генерация программного прерывания. 6.1. Описание VIC Контроллер векторов прерываний VIC обслуживает 32 входа запросов пре- рываний, которые он может назначать для обслуживания в трех категориях: быстрый запрос прерывания (FIQ), векторизованный запрос прерывания (IRQ) и невекторизованный запрос прерывания (IRQ). Эти назначения могут быть за- программированы. То есть приоритеты прерываний от различных периферий- ных устройств могут динамически назначаться и корректироваться в пользова- тельской программе. Быстрый запрос прерывания (FIQ) имеет самый высокий приоритет. Если в данный момент времени поступил более чем один запрос FIQ, то контроллер векторов прерываний подает на процессор ARM сигналы запросов FIQ, объ- единенные в соответствии с логической функцией ИЛИ. Самое малое из воз- можных времен ожидания обслуживания для FIQ достигается, когда только один запрос прерывания классифицирован контроллером как FIQ, потому что в этом случае сервисная подпрограмма обслуживания FIQ запускается для вза- имодействия непосредственно с устройством, запросившим прерывание. Если в текущий момент времени имеется более чем один запрос, классифицирован- ный контроллером как FIQ, то сервисная программа сначала считывает из кон- троллера векторов прерываний слово, которое идентифицирует источники, за- просившие прерывания. Векторизованные запросы прерываний имеют средний приоритет. Только 16 из 32 возможных запросов могут быть назначены контроллером в эту катего- рию. Любой из 32 запросов может быть назначен на любой из 16 слотов векто- ризованных запросов прерываний, среди которых слот 0 имеет самый высокий приоритет, а слот 15 — самый низкий. Невекгоризованные запросы прерываний имеют самый низкий приоритет. Контроллер векторов прерываний объединяет в соответствии с логической функцией OR сигналы от всех векторизованных и невекторизованных запросов прерываний (IRQ) для их подачи на процессор ARM. Сервисная программа об- служивания запроса прерывания (IRQ) читает регистр из VIC и производит пе-
106 Глава 6. Контроллер векторов прерываний (VIC) реход на требуемый вектор. Если поступает любой из векторизованных запросов прерывания, то VIC выделяет для него адрес с самым высоким приоритетом, со- ответствующий сервисной программе обслуживания запросов прерываний. В ином случае, VIC по умолчанию выделяет для запроса адрес подпрограммы, ко- торая обслуживает все невекторизованные запросы прерываний. Эта выделяе- мая по умолчанию подпрограмма читает другой регистр VIC, чтобы определить, какие запросы прерываний в данный момент являются активными. Все регистры контроллера векторов прерываний имеют размер слова. За- пись и чтение байта и полуслова не поддерживаются. Блок-схема контроллера векторов прерываний приведена на Рис. 6.1. Дополнительная информация о контроллере векторов прерываний доступ- на в документации по PrimeCell ™ Vectored Interrupt Controller (PL190). Запросы прерываний, их маскирование и выбор Рис. 6.1. Блок-схема контроллера векторов прерываний VIC 6.2. Регистры VIC Регистры VIC перечислены в Табл. 6.1. Более детальные их описания даны ниже. В этом разделе регистры VIC описываются в том порядке, в котором они используются в логике VIC, начиная от входов прерываний и заканчивая регис- трами, редко используемыми программным обеспечением.
6.2, Регистры VIC 107 Таблица 6.1. Регистры VIC Название Описание Доступ Значение после сброса1* Адрес VICIRQStatus Регистр состояния IRQ. При чтении этого ре- гистра возвращается текущее состояние тех за- просов прерываний, которые разрешены и классифицируются как запросы IRQ RO 0 OxFFFF F000 VICFIQStatus Регистр состояния FIQ. При чтении этого ре- гистра возвращается текущее состояние тех за- просов прерываний, которые разрешены и классифицируются как запросы FIQ RO 0 OxFFFF F004 VICRawIntr Регистр состояния необработанных прерыва- ний. При чтении этого регистра возвращается текущее состояние 32 запросов прерыва- ний/программных прерываний вне зависимос- ти от их разрешенности или их классификации RO 0 OxFFFF F008 VICIntSelect Регистр выбора прерываний. Этот регистр классифицирует каждое из 32 запросов преры- ваний как запрос FIQ или запрос IRQ R/W 0 OxFFFF F00C VICIntEnable Регистр разрешения прерываний. Этот регистр управляет разрешениями, которые даются каж- дому из 32 запросов прерываний и програм- мным прерываниям как FIQ или IRQ R/W 0 OxFFFF F010 VICIntEnClr Регистр разрешения сброса разрешенных пре- рываний. Этот регистр разрешает программно- му обеспечению сбрасывать один или более би- тов в регистре разрешения прерываний W 0 OxFFFF F014 VICSoftInt Регистр программных прерываний. Содержи- мое этого регистра побитно объединяется по функции ИЛИ с сигналами 32 запросов преры- ваний от различных периферийных устройств и функций R/W 0 OxFFFF F018 VICSoftIntClear Регистр сброса программных прерываний. Этот регистр разрешает программному обеспечению сбрасывать один или более битов в регистре программных прерываний W 0 OxFFFF F01C VICProtection Регистр разрешения защиты. Этот регистр поз- воляет ограничивать доступ к регистрам VIC для программного обеспечения, выполняюще- гося в пользовательском режиме R/W 0 OxFFFF F020 VICVectAddr Регистр адреса вектора. Когда происходит за- прос IRQ, сервисная подпрограмма обслужива- ния запросов IRQ может прочитать этот регистр и передать управление по прочитанному значе- нию адреса R/W 0 OxFFFF F030 VICDefVectAddr Заданный по умолчанию регистр адреса векто- ра. Этот регистр содержит адрес для сервисной подпрограммы обработки прерываний (ISR), которая обрабатывает невекторизованные за- просы прерываний R/W 0 OxFFFF F034 VICVectAddrO Регистр адреса вектора 0. Регистры адреса век- торов 0... 15 содержат адреса для сервисных под- программ обработки прерываний для 16 век- торных слотов IRQ R/W 0 OxFFFF F100 VICVectAddrl Регистр адреса вектора 1 R/W 0 OxFFFF F104 VICVectAddr2 Регистр адреса вектора 2 R/W 0 OxFFFF F108
108 Глава 6. Контроллер векторов прерываний (VIC) Таблица 6.1. Регистры VIC (продолжение) Название Описание Доступ Значение после сброса1* Адрес VICVectAddr3 Регистр адреса вектора 3 R/W 0 OxFFFF F10C VICVectAddr4 Регистр адреса вектора 4 R/W 0 OxFFFF Fl 10 VICVectAddr5 Регистр адреса вектора 5 R/W 0 OxFFFF Fl 14 VICVectAddr6 Регистр адреса вектора 6 R/W 0 OxFFFF Fl 18 VICVectAddr7 Регистр адреса вектора 7 R/W 0 OxFFFF F11C VICVectAddr8 Регистр адреса вектора 8 R/W 0 OxFFFF F120 VICVectAddr9 Регистр адреса вектора 9 R/W 0 OxFFFF Fl 24 VICVectAddrlO Регистр адреса вектора 10 R/W 0 OxFFFF Fl 28 VICVectAddrl 1 Регистр адреса вектора 11 R/W 0 OxFFFF F12C VICVectAddrl 2 Регистр адреса вектора 12 R/W 0 OxFFFF F130 VICVectAddrl 3 Регистр адреса вектора 13 R/W 0 OxFFFF F134 VICVectAddrl4 Регистр адреса вектора 14 R/W 0 OxFFFF F138 VICVectAddrl5 Регистр адреса вектора 15 R/W 0 OxFFFF F13C VICVectCntIO Регистр управления вектором 0. Каждый из ре- гистров управления векторами 0...15 управляет одним из 16 векторных слотов IRQ. Слот 0 име- ет самый высокий приоритет, а слот 15 — самый низкий R/W 0 OxFFFF F200 VICVectCntll Регистр управления вектором 1 R/W 0 OxFFFF F204 VICVectCntl2 Регистр управления вектором 2 R/W 0 OxFFFF F208 VICVectCntl3 Регистр управления вектором 3 R/W 0 OxFFFF F20C VICVectCntl4 Регистр управления вектором 4 R/W 0 OxFFFF F210 VICVectCntl5 Регистр управления вектором 5 R/W 0 OxFFFF F214 VICVectCntl6 Регистр управления вектором 6 R/W 0 OxFFFF F218 VICVectCntl7 Регистр управления вектором 7 R/W 0 OxFFFF F21C VICVectCntl8 Регистр управления вектором 8 R/W 0 OxFFFF F220 VICVectCntl9 Регистр управления вектором 9 R/W 0 OxFFFF F224 VICVectCntllO Регистр управления вектором 10 R/W 0 OxFFFF F228 VICVectCntll 1 Регистр управления вектором 11 R/W 0 OxFFFF F22C VICVectCntll2 Регистр управления вектором 12 R/W 0 OxFFFF F230 VICVectCntll3 Регистр управления вектором 13 R/W 0 OxFFFF F234 VICVectCntll4 Регистр управления вектором 14 R/W 0 OxFFFF F238 VIC\fectCntll5 Регистр управления вектором 15 R/W 0 OxFFFF F23C Значение относится к данным, содержащимся только в используемых битах, и не включает содержимое зарезервированных битов.
6.2. Регистры VIC 109 Регистр программных прерываний (VlCSoftlnt — 0xFFFFF018, R/W) Битовая структура регистра VlCSoftlnt приведена в Табл. 6.2. * Содержимое этого регистра побитно объединяется по функции ИЛИ с сиг- налами 32 запросов прерываний от различных периферийных устройств и фун- кций до того, как эти сигналы поступают на любую другую внутреннюю логику. Таблица 6.2. Биты регистра программных прерываний (VlCSoftlnt — 0xFFFFF018, R/W) Номер бита Название бита Функция бита Значение после сброса 31:0 VlCSoftlnt 1: генерировать запрос прерывания с номером, соответствующим разрядному (порядковому) номеру этого бита. 0: не генерировать запрос прерывания с номером, соответствую- щим разрядному (порядковому) номеру этого бита. Запись нулей в биты регистра VlCSoftlnt не имеет никакого эффекта (см. описа- ние регистра VICSoftIntClear) 0 Регистр сброса программных прерываний (VICSoftIntClear—OxFFFFFOl С, WO) Битовая структура регистра VICSoftIntClear приведена в Табл. 6.3. Этот регистр разрешает программному обеспечению сбрасывать один или более битов в регистре программных прерываний VlCSoftlnt, если отсутствует необходимость чтения последнего. Таблица 6.3. Биты регистра сброса программных прерываний (VICSoftIntClear — OxFFFFFOlC, WO) Номер бита Название бита Функция бита Значение после сброса 31:0 VICSoftIntClear 1: запись 1 сбрасывает соответствующий бит в регистре про- граммных прерываний VlCSoftlnt и таким образом произво- дит сброс соответствующего запроса. 0: запись 0 оставляет соответствующий бит в регистре VlCSoftlnt неизменным 0 Регистр состояния необработанных прерываний (VICRawIntr — 0xFFFFF008j RO) Битовая структура регистра VICRawIntr приведена в Табл. 6.4. При чтении этого регистра возвращается текущее состояние 32 запросов прерываний/программных прерываний вне зависимости от их разрешеннос^и или их классификации. Таблица 6.4. Биты регистра состояния необработанных прерываний (VICRawIntr—0xFFFFF008, RO) Номер бита Название бита Функция бита Значение после сброса 31:0 VICRawIntr 1: запрос на прерывание или программное прерывание с номе- ром, соответствующим разрядному (порядковому) номеру этого бита, присутствует. 0: зайрос на прерывание или программное прерывание с этим порядковым номером отсутствует 0 Регистр разрешения прерываний (VICIntEnable — OxFFFFFOlO, R/W) Битовая структура регистра VICIntEnable приведена в Табл. 6.5. Этот регистр управляет разрешениями, которые даются каждому из этих 32 запросов прерываний и программных прерываний, как запросам FIQ или IRQ.
110 Глава 6. Контроллер векторов прерываний (VIC) Таблица 6.5. Биты регистра разрешения прерываний (VICINtEnable — OxFFFFFOlO, R/W) Номер бита Название бита Функция бита Значение после сброса 31:0 VICIntEnable При чтении битов этого регистра: логическая 1 означает, что со- ответствующие запросы прерывания или программные прерыва- ния разрешены как запросы FIQ или IRQ. Запись в биты этого регистра логической 1 разрешает соответс- твующие запросы прерывания или программные прерывания как запросы FIQ или IRQ. Запись в биты этого регистра логического 0 не имеет никакого эффекта (для запрета прерываний см. описа- ние регистра VICIntEnClear) 0 Регистр разрешения сброса прерываний (VICIntEnClear — 0xFFFFF014, WO) Битовая структура регистра VICIntEnClear приведена в Табл. 6.6. Этот регистр разрешает программному обеспечению сбрасывать один или более битов в регистре разрешения прерываний, если отсутствует необходи- мость чтения последнего. Таблица 6.6. Биты регистра разрешения сброса прерываний (VICIntEnClear — 0xFFFFF014, WO) Номер бита Название бита Функция бита Значение после сброса 31:0 VICIntEnClear 1: запись логической 1 сбрасывает соответствующий бит в ре- гистре разрешения прерывания VICIntEnable, запрещая, таким образом, прерывание для этого запроса. 0: запись логического 0 оставляет соответствующий бит в ре- гистре VICIntEnable неизменным 0 Регистр выбора прерываний (VICIntSelect — OxFFFFFOOC, R/W) Битовая структура регистра VICIntSelect приведена в Табл. 6.7. Этот регистр классифицирует каждый из 32 запросов прерываний как за- прос FIQ или запрос IRQ. Таблица 6.7. Биты регистра выбора прерываний (VICIntSelect — OxFFFFFOOC, R/W) Номер бита Название бита Функция бита Значение после сброса 31:0 VICIntSelect 1: запрос прерывания с этим разрядным (порядковым) номером назначен в категорию запросов FIQ. 0: запрос прерывания с этим разрядным (порядковым) номером назначен в категорию запросов IRQ 0 Регистр состояния запросов IRQ (VICIRQStatus — OxFFFFFOOO, RO) Битовая структура регистра VICIRQStatus приведена в Табл. 6.8. При чтении этого регистра возвращается текущее состояние тех запросов прерываний, которые разрешены и классифицируются как запросы IRQ, неза- висимо от того, векторизованные или невекторизованные эти запросы. Таблица 6.8. Биты регистра состояния запросов IRQ (VICIRQStatus — OxFFFFFOOO, RO) Номер бита Название бита Функция бита Значение после сброса 31:0 VICIRQStatus 1: запрос прерывания с номером, соответствующим разряд- ному (порядковому) номеру этого бита, разрешается, клас- сифицируется как запрос IRQ и присутствует (имеет место) 0
6.2. Регистры VIC 111 Регистр состояния запросов FIQ (VICFIQStatus — 0xFFFFF004, RO) Битовая структура регистра VICFIQStatus приведена в Табл. 6.9. При чтении этого регистра возвращается текущее состояние тех запросов прерываний, которые разрешены и классифицируются как запросы FIQ. Если более чем один запрос классифицирован как FIQ, то сервисная программа за- просов FIQ может прочитать этот регистр, чтобы определить, какой из запросов является активным. Таблица 6.9. Биты регистра состояния запросов FIQ (VICFIQStatus — 0xFFFFF004, RO) Номер бита Название бита Функция бита Значение после сброса 31:0 VICFIQStatus 1: запрос прерывания с номером, соответствующим разрядно- му (порядковому) номеру этого бита, разрешается, классифи- цируется как запрос FIQ и присутствует (имеет место) 0 Регистры управления векторами 0...15 (VICVectCntlO. ..15 — 0xFFFFF200. ..23С, R/W) Битовая структура каждого из регистров VICVectCntlO... 15 приведена в Табл. 6.10. Каждый из регистров управления векторами 0...15 управляет одним из 16 векторных слотов IRQ. Слот 0 имеет самый высокий приоритет, а слот 15 — са- мый низкий. Примечание. Отключение слота запроса IRQ в одном из регистров VICVectCntI не отклю- чает соответствующее прерывание непосредственно, а просто приводит к замене его формы на невекторизованную. Таблица 6.10. Биты регистров управления векторами (VICVectCntlO... 15 — 0xFFFFF200.. .23С, R/W) Номе рбита Название бита Функция бита Значение после сброса 5 VICVectCntlO... 15 1: векторный слот запроса IRQ включен, и может произ- водить уникальный адрес сервисной подпрограммы обра- ботки прерывания (ISR), когда разрешен назначенный за- прос прерывания или программного прерывания, который классифицируется как запрос IRQ и присутству- ет (имеет место) 0 4:0 VIC\fectCntl0...15 Номер запроса прерывания или программного прерыва- ния, назначенного на этот векторный слот запроса IRQ. В соответствии с хорошим стилем программирования, программное обеспечение не должно назначать одно пре- рывание более чем одному разрешенному векторному слоту запроса IRQ. Если же это произошло, то в первую очередь следует использовать слот с наименьшим номе- ром (т. е. с наивысшим приоритетом), когда запрос пре- рывания или программного прерывания разрешен, клас- сифицируется как запрос IRQ и присутствует (имеет место) 0 Регистры адреса векторов 0...15 (VICVectAddrO...15 — 0xFFFFF100...13C, R/W) Битовая структура каждого из регистров VICVectAddrO...15 приведена в Тйбл. 6.11. Регистры адреса векторов 0...15 содержат адреса для сервисных подпро- грамм обработки прерываний для 16 векторных слотов IRQ.
112 Глава 6. Контроллер векторов прерываний (VIC) Таблица 6.11. Биты регистров адреса векторов (VICVectAddrO... 15 — OxFFFFFlOO... 13С, R/W) Номер бита Название бита Функция бита Значение после сброса 31:0 VIC\fectAddrO...15 Когда один или более запросов прерываний или програм- мных прерываний разрешены, классифицированы как за- просы IRQ, присутствуют (имеют место) и назначены на включенный векторный слот запроса IRQ, то в этом регистре сервисная подпрограмма обработки запросов IRQ для слота с самым высоким приоритетом прочитает адрес вектора (VICVectAddr) 0 Заданный по умолчанию регистр адреса вектора (VICDefVectAddr—0xFFFFF034, R/W) Битовая структура регистра VICDefVectAddr приведена в Табл. 6.12. Этот регистр содержит адрес для сервисной подпрограммы обработки пре- рываний (ISR), которая обрабатывает невекторизованные запросы прерываний. Таблица 6.12. Биты заданного по умолчанию регистра адреса вектора (VICDefVectAddr - 0xFFFFF034, R/W) Номер бита Название бита Функция бита Значение после сброса 31:0 VICDefVectAddr Если в тот момент, когда сервисная подпрограмма запроса IRQ читает регистр адреса вектора (VICVectAddr), ни один из слотов IRQ не отвечает, как было описано выше, то чте- ние возвращает адрес, содержащийся в регистре VICDefVectAddr 0 Регистр адреса вектора (VICVectAddr — 0xFFFFF030, R/W) Битовая структура регистра VICVectAddr приведена в Табл. 6.13. Когда происходит запрос IRQ, сервисная подпрограмма обслуживания за- просов IRQ может прочитать этот регистр и передать управление по прочитан- ному значению адреса. Таблица 6.13. Биты регистра адреса вектора (VICVectAddr — 0xFFFFF030, R/W) Номер бита Название бита Функция бита Значение после сброса 31:0 VICVectAddr Когда один или более запросов прерываний или програм- мных прерываний разрешены, классифицированы как за- просы IRQ, присутствуют (имеют место) и назначены на включенный векторный слот запроса IRQ, то чтение этого регистра возвращает значение адреса, хранящегося в регис- тре адреса вектора для слота с самым высоким приоритетом (наименьшим по номеру). Если эти условия не выполнены, то чтение возвращает значение адреса, хранящегося в задан- ном по умолчанию регистре адреса вектора VIC\fectAddr. Запись в этот регистр не означает, что соответствующее зна- чение адреса будет использоваться и при обработке всех последующих прерываний. Каждый раз в конце сервисной подпрограммы обработки прерывания в этот регистр долж- на быть произведена запись, чтобы обновить состояние ап- паратных средств контроллера 0
6.3. Источники прерываний 113 Регистр разрешения защиты (VICProtection — 0xFFFFF020, R/W) Битовая структура регистра VICProtection приведена в Табл. 6.14. Этот однобитный регистр позволяет ограничивать доступ к регистрам VIC для программного обеспечения, выполняющегося в пользовательском режиме. Таблица 6.14. Биты регистра разрешения защиты (VICProtection — OxFFFFFOlO, R/W) Номер бита Название бита Функция бита Значение после сброса 0 VICProtection 1: к регистрам VIC можно обращаться только в привилегиро- ванном режиме. 0: к регистрам VIC можно обращаться в пользовательском или привилегированном режимах 0 6.3. Источники прерываний В Табл. 6.15 приведен список источников прерываний для каждого перифе- рийного устройства на примере микроконтроллеров LPC2119/29/94 и LPC2292/94. К каждому периферийному устройству подключена одна линия прерывания, связанная с контроллером векторов прерываний. Кроме того, каждое периферийное устройство может иметь несколько внутренних флагов прерываний. Индивидуальные флаги прерываний могут представлять более чем один источник прерываний. Таблица 6.15. Связь источников прерываний микроконтроллера с контроллером векторов прерываний VIC (на примере микроконтроллеров LPC2119/29/94 и LPC2292/94) Блок Флаги Канал VIC # WDT Прерывание от сторожевого таймера (WDINT) 0 — Зарезервирован только для программных прерываний 1 Ядро ARM Встроенный ICE, DbgCommRx 2 1 Ядро ARM Встроенный ICE, DbgCommTx 3 TIMER0 Совпадение 0...3 (MRO, MR1, MR2, MR3) Захват 0...3 (CRO, CR1, CR2, CR3) 4 TIMER1 Совпадение 0...3 (MRO, MR1, MR2, MR3) Захват 0...3 (CRO, CR1, CR2, CR3) 5 UART0 Состояние линии Rx (RLS) Регистр передачи пуст (THRE) Принятые данные доступны (RDA) Индикатор тайм-аута (CTI) 6 UART1 Состояние линии Rx (RLS) Регистр передачи пуст (THRE) Принятые данные доступны (RDA) Индикатор тайм-аута (CTI) Прерывание по состоянию модема (MSI) 7 PWM0 Совпадение 0...6 (MRO, MR1, MR2, MR3, MR4, MR5, MR6) 8 I2C SI (смена состояния) 9 304
114 Глава 6. Контроллер векторов прерываний (VIC) Таблица 6.15. Связь источников прерываний микроконтроллера с контроллером векторов прерываний VIC (на примере микроконтроллеров LPC2119/29/94 и LPC2292/94) (продолжение) Блок Флаги Канал VIC # SPIO Флаг прерывания от SPI (SPIF) Режим ошибки (MODF) 10 SPI1 Флаг прерывания от SPI (SPIF) Режим ошибки (MODF) 11 PLL Петля ФАПЧ замкнута (PLOCK) 12 RTC Счетчик инкрементирован (RTCCIF) Тревога (RTCALF) 13 Управление системой Внешнее прерывание 0 (EINT0) 14 Управление системой Внешнее прерывание 1 (EINT1) 15 Управление системой Внешнее прерывание 2 (EINT2) 16 Управление системой Внешнее прерывание 3 (EINT3) 17 A/D АЦП 18 CAN CANITx 20 CAN2 Тх 21 CAN3 Тх (только у LPC2194/2292/2294, иначе зарезервирован) 22 CAN4 Тх (только у LPC2194/2292/2294, иначе зарезервирован) 23 Зарезервированы 24, 25 CANIRx 26 CAN2Rx 27 CAN3 Rx (только у LPC2194/2292/2294, иначе зарезервирован) 28 CAN4 Rx (только у LPC2194/2292/2294, иначе зарезервирован) 29 Зарезервированы 30,31 6.4. Ложные прерывания В процессорах ARM7TDMI, каковыми являются микроконтроллеры се- мейства LPC2000, могут происходить так называемые ложные прерывания, воз- никающие из-за асинхронной обработки запросов прерываний. Асинхронный характер обработки прерывания является следствием характера взаимодейс- твия процессорного ядра и VIC. Если состояние VIC изменяется между момен- тами, когда ядро обнаруживает прерывание и фактически обрабатывает преры- вание, могут возникнуть некоторые проблемы.
6.5. Детальные исследования ложных прерываний 115 В реальном приложении может иметь место следующий сценарий: 1. VIC «решает», что есть запрос IRQ, и посылает сигнал запроса IRQ ядру. 2. Ядро фиксирует состояние запроса прерывания. 3. Обработка запроса продолжается в течение нескольких циклов из-за нали- чия конвейера команд. 4. Ядро загружает адрес запроса прерывания из VIC. Существует вероятность, что состояние VTC изменилось во время шага 3. Например, VIC изменился так, что это изменение вызвало последовательность, начинающуюся с шага 1. При этом прежнее прерывание перестает обрабаты- ваться. В этом случае, VIC уже не будет способен идентифицировать прерыва- ние, которое сгенерировало запрос, и в результате VIC возвратит заданный по умолчанию адрес вектора прерывания VicDefVectAddr (OxFFFF F034). Этот потенциально аварийный сценарий может быть предотвращен двумя способами: 1. Прикладной код должен содержать программные блоки, предотвращающие ложные прерывания, которые могут когда-либо случиться. При этом простой защиты от изменений VIC может оказаться недостаточно, поскольку, напри- мер, сбои при обработке прерывания могут также вызвать ложные прерывания. 2. Обработчик значения по умолчанию контроллера VIC должен быть про- граммно установлен и проверен должным образом. 6.5. Детальные исследования ложных прерываний Этот раздел содержит сведения, которые в более подробной форме могут быть получены на официальном сайте ARM (http://wwMLarm.com) в секции часто задаваемых вопросов (FAQ) под рубрикой «Техническая поддержка»: http://www.arm.com/support/faqip/3677.html. Что произойдет, если прерывание поступит в момент его программного от- ключения? Рассмотрим ситуацию с учетом архитектуры ARM7TDMI. Если прерывание получено ядром во время выполнения команды, которая отключает прерывания, тогда процессор семейства ARM7 все-таки воспримет прерывание. Это произойдет как для прерываний FIQ, так и для прерываний IRQ. Например, рассмотрим последовательность команд: MRS rO, cpsr ORR rO, rO, #I_Bit:OR:F_Bit ;отключить IRQ и FIQ прерывания MSR cpsr_c, rO Если запрос IRQ получен во время выполнения команды MSR, то поведе- ние системы будет следующим: • запрос IRQ запирается; • команда MSR cpsr, гО выполняется до завершения, устанавливаются биты IhFbCPSR; • прерывание IRQ воспринимается, потому что этот запрос поступил до реальной установки бита I в CPSR; • CPSR (с установленными битами I и F) перемещается в SPSR_irq.
116 Глава 6. Контроллер векторов прерываний (VIC) Все это означает, что на входе в подпрограмму обработки запроса IRQ про- исходит необычный эффект, при котором прерывание запроса IRQ восприни- мается, в то время как бит I в SPSR уже установлен. В приведенном выше при- мере бит F будет также установлен и в CPSR, и в SPSR. Это означает, что преры- вания FIQ будут запрещены после входа в сервисную подпрограмму обработки запроса IRQ, и останутся в таком виде, пока вновь не будут разрешены. При- чем, прерывания FIQ не будут разрешены автоматически при последующем возврате из IRQ. В данном примере и IRQ, и FIQ оказались запрещенными, а произошло это, когда только один из этих типов прерываний был запрещен. Тот факт, что ядро обрабатывает запрос прерывания после завершения команды MSR, кото- рая запрещает прерывания, обычно не вызывает проблем для прерывания, пос- тупающего на один цикл раньше указанной команды. Когда подпрограмма обслуживания прерывания возвращает управление, то команда SUBS рс,1г,#4 восстанавливает SPSR_IRQ в CPSR. В CPSR будут снова установлены биты I и F, и поэтому выполнение программы продолжится со все- ми запрещенными прерываниями. Однако это может вызвать проблемы в сле- дующих случаях: Проблема 1. Специфическая подпрограмма, возможно, вызванная как обра- ботчик запроса IRQ или как регулярная подпрограмма. В последнем случае не- обходимо гарантировать, чтобы запросы IRQ были запрещены до вызова под- программы. Подпрограмма, в свою очередь, должна учитывать это требование и проверять условия в момент своего вызова (анализируя состояние бита I SPSR), а возвращать управление должна, используя соответствующую команду. Если в подпрограмму входит команда MSR, которая отключает запросы IRQ (при этом бит I в SPSR будет установлен), и запрос IRQ поступает во время вы- полнения этой команды, то подпрограмма не воспримет запрос IRQ. Проблема 2. И запросы FIQ, и запросы IRQ запрещены одной и той же за- писью в CPSR. В этом случае, если запрос IRQ поступил в ходе записи в CPSR, то запросы FIQ будут запрещены на время выполнения обработчика запросов IRQ. Это может быть неприемлемым в системе, где запросы FIQ не должны за- прещаться на время большее, чем несколько циклов. Компания NXP предлагает три возможных решения вышеописанных про- блем. Какое из них является наиболее приемлемым, будет зависеть от требова- ний, предъявляемых к конкретной системе. Решение 1. Следует добавить в начало подпрограммы обслуживания преры- вания программный код, подобный приведенному ниже: SUB lr, lr, #4 ; Корректируем LR так, чтобы указать на возврат STMFD sp! lr} ; Освобождаем некоторые регистры (сохраняем контекст) MRS lr, SPSR ; Определяем, получили ли мы прерывание ; в то время как TST lr, #I_Bit ; прерывания были запрещены. LDMNEFD sp! , рс}Л ; Если так, то возврат немедленно. ; Прерывание становится отложенным, ; так как мы не имеем возможности ; сейчас его обрабатывать, а сможем
6.6. Рекомендации по использованию VIC 117 ; сделать это, когда прерывания ; впоследствии будут разрешены. ; Остальная часть подпрограммы ; обработки прерывания. Эта небольшая программа анализирует, не был ли запрос IRQ получен в мо- мент, когда производилось отключение запросов IRQ. Если имеет место как раз такой случай, программа инициирует немедленный возврат из прерывания, за- прос IRQ сбрасывается, а в дальнейшем запросы IRQ запрещаются. Подобный программный код может быть применен и в обработчике FIQ, чтобы решить вышеуказанную проблему номер 1. Предложенный подход ре- комендуется производителем, поскольку позволяет решить также и вторую проблему. Однако при решении второй проблемы, интервал времени, в тече- ние которого будут запрещены запросы FIQ, увеличивается на несколько циклов. Решение 2. Запретить запросы IRQ и FIQ, используя отдельные команды за- писи в CPSR, как-то: MRS r0, cpsr ORR r0, rO, #I_Bit ; запрет IRQ MSR cpsr_c, rO ORR rO, rO, #F_Bit ; запрет FIQ MSR cpsr_c, rO Это лучшее решение, поскольку время, в течение которого запросы FIQ за- прещены, никак не увеличивается. Однако при этом не решается проблема 1 и в каждом месте программы, где запросы IRQ и FIQ запрещаются одновременно, требуются дополнительные команды. Решение 3. Вновь разрешаются запросы FIQ в начале обработчика запросов IRQ. Поскольку требуемое состояние всех битов в CPSR известно, то лучше всего записать в CPSR непосредственное значение, например: MSR cpsr_c, #I_Bit:0R:irq_MODE ;IRQ должны быть запрещены ;FIQ разрешены /Состояние ARM, режим запроса IRQ Это решение требует только модификации обработчика запросов IRQ и позволяет вновь разрешать запросы FIQ, спустя меньший, чем в решении 1, ин- тервал времени. Однако это решение можно использовать лишь в том случае, если система может гарантировать, что запросы FIQ не будут запрещены, когда разрешены запросы IRQ. Если такой гарантии нет, то следует использовать ре- шение 1. 6.6. Рекомендации по использованию VIC Если пользовательский програмный код выполняется во встроенной опера- тивной памяти и приложение использует прерывания, то векторы прерываний должны быть переотображены на адрес 0x0 Flash-памяти. Это необходимо, пос- кольку все векторы исключительных состояний (ИС — к ним относятся и пре-
118 Глава 6. Контроллер векторов прерываний (VIC) рывания) расположены по адресам 0x0 и выше. Этого легко достигнуть путем конфигурирования регистра МЕММАР (расположенного в блоке управления системой) в режиме пользовательской оперативной памяти. Прикладной код должен быть связан с таблицей векторов прерываний (IVT), которая постоянно расположена по адресу 0x40000000. Несмотря на то что в качестве генераторов запросов FIQ могут быть выбра- ны многие источники (VICIntSelect), для обслуживания всех доступных/сущес- твующих запросов FIQ должна быть выделена только одна сервисная подпро- грамма обработки прерываний. Поэтому в случае, когда более чем один источ- ник прерывания классифицирован как запрос FIQ, подпрограмма обработки прерывания FIQ должна читать регистр VICFIQStatus, чтобы по результатам чтения его содержимого выбрать алгоритм обработки запроса прерывания. Од- нако рекомендуется, чтобы как FIQ был классифицирован только один источ- ник прерывания. Классификация в качестве FIQ более чем одного источника увеличит время ожидания начала обработки прерывания. После завершения требуемой сервисной подпрограммы обработки преры- вания, сброс флага прерывания на уровне периферии сведется к изменению состояний некоторого множества битов в регистрах VIC (VICRawIntr, VICFIQStatus и VICIRQStatus). Необходимо также до возвращения из преры- вания выполнить запись в регистр VICVectAddr, прежде, чем может быть об- служено следующее прерывание. Эта запись сбрасывает соответствующий флаг прерывания во внутренней логической схеме аппаратной обработки пре- рываний. Чтобы запретить прерывание в VIC, необходимо сбросить соответствующий бит в регистре VICIntEnClr, который, в свою очередь, сбрасывает связанный с ним бит в регистре VICIntEnable. Производится также обращение к регистрам VlCSoftlnt и VICSoftIntClear. Биты регистра VICSoftIntClear будут сбрасывать соответствующие им биты в регистре VlCSoftlnt. Например, если VlCSoftlnt = 0x00000005 и бит 0 должен быть сброшен, то значение регистра VICSoftIntClear = 0x00000001 выполнит эту задачу. Перед новой операцией сброса того же самого бита в регистре VlCSoftlnt, для проведения которой пред- назначен соответствующий бит регистра VICSoftIntClear, необходимо предва- рительно задать VICSoftIntClear = 0x00000000. Другими словами, запись 1 в лю- бой бит регистра с суффиксом Clear будет иметь одноразовый эффект для соот- ветствующего бита регистра, которым он управляет. Если разрешено сторожевое прерывание (прерывание от сторожевого тай- мера) при антипереполнении или недействительной (инвалидной) последова- тельности счета, то не существует способа сбросить это прерывание. Единс- твенный вариант возврата из такого прерывания заключается в его запрещении в VIC (путем использования VICIntEnClr). Пример Пусть требуется, чтобы запросы прерываний, генерируемые UART0 и SPI0, классифицировались как векторизованные запросы IRQ (запрос от UART0 должен находиться на более высоком уровне, чем от SPI0), в то время как UART1 и I2C должны генерировать невекторизованные запросы IRQ. Для этого в VIC требуется сделать следующие установки:
6.6. Рекомендации по использованию VIC 119 VICIntSelect = 0x00000000 VICIntEnable = ОхОООООбСО VICDefVectAddr = Ox... VICVectAddrO = Ox... VICVectAddrl = Ox... VICVectCntIO = 0x00000026 VICVectCntll = 0x0000002A (SPIO, I2C, UART1 и UART0 - запросы IRQ => бит 10, бит 9, бит 7 и бит 6 сброшены). (SPIO, I2C, UART1 и UART0 - разрешенные прерывания => бит 10, бит 9, бит 7 и бит 6 уста- новлены). (содержит стартовый адрес подпрограммы для обслуживания невекторизованных запросов IRQ (т. е. UART1 и I2C)). (содержит стартовый адрес сервисной подпро- граммы обслуживания запроса IRQ от UART0). (содержит стартовый адрес сервисной подпро- граммы обслуживания запроса IRQ от SPIO). (источник прерывания с индексом 6 (UART0) разрешен как источник с приоритетом 0 (самым высоким)). (источник прерывания с индексом 10 (SPIO) разрешен как источник с приоритетом 1). После того, как поступит любой из запросов на прерывание (SPIO, I2C, UART0 или UART1), микроконтроллер переадресует выполнение программно- го кода на адрес 0x00000018. Для векторизованного и невекторизованного за- просов IRQ в ячейке 0x18 может быть размещена следующая команда: LDR pc, [pc, #-0xFF0] Эта команда загружает в программный счетчик PC значение адреса, кото- рый находится в регистре VICVectAddr. В случае, если поступил запрос от UART0, содержимое регистра VICVectAddr будет идентично содержимому VICVectAddrO, а в случае, если поступил запрос от SPIO, — содержимому VICVectAddrl. Если ни UART0, ни SPIO не генерировали запрос IRQ, а его сге- нерировали UART1 и/или I2C, то содержимое регистра VICVectAddr будет идентично содержимому VICDefVectAddr.
ГЛАВА 7 ЦОКОЛЕВКА И НАЗНАЧЕНИЕ ВЫВОДОВ Описание выводов LPC2101/02/03 с указанием их альтернативных функций приведено в Табл. 7.1. Цоколевки корпусов LPC2101/02/03 с указанием номе- ров и функций выводов приведены на Рис. 7.1, Рис. 7.2. _.Л - I УЫ I I О, О, рс о о СС P0.19/MAT1.2/MIS01 P0.20/MAT1.3/MOSI1 P0.21/SSEL1/MAT3.0 VBAT VDD(1V8) RST Vss P0.27/TRST/CAP2.0 P0.28/TMS/CAP2.1 Р0.29ДСК/САР2.2 Х1 Х2 'Л'' ‘Я3 -/Si , < < —/ ,' "J33 с В '< - > ' Л9з св: - с»\' < 271 со< :" , ?' л" л; яр СШ . ' ' " - \ ''' " X ?^з P0.11/CTS1/CAP1.1/AD0.4 P0.10/RTS1/CAP1.0/AD0.3 P0.24/AD0.2 P0.23/AD0.1 P0.22/AD0.0 VSSA P0.9/RxD1/MAT2.2 Р0.8Дх01/МАТ2.1 P0.7/SSEL0/MAT2.0 DBGSEL RTCK RTXC2 r- cm co q о ° ЙГ, O r- r- CM ШИПИН SS^g 3 £££ £ Рис. 7.1. Топологическая схема корпуса LQFP48 микроконтроллеров LPC2101/02/03 ю I Z см ш w со < р! о со CM ^.Z CL CL fc Ш Б /Ч*Ч 1Л I л Ы! СО Г-. СО Ю < СО ПЮ см P0.19/MAT1.2/MISO1 P0.20/MAT1.3/MOSI1 P0.21/SSEL1/MAT3.0 VDD(1V8) RST P0.27/TRST/CAP2.0 P0.28/TMS/CAP2.1 Р0.29/ТСК/САР2.2 Х1 Х2 С& ' P0.11/CTS1/CAP1.1/AD0.4 С В ? 3 P0.10/RTS1/CAP1.0/AD0.3 С |, ", /: Л $ 3 P0.24/AD0.2 С fl ' '/' z' Л ИЗ P0.23/AD0.1 С It Ц»С2Ш1/С$Ж ЛЙ 3 P0.22/AD0.0 ' 34 3 VSSA зз з------------------- ’ $3 31з :$3 з Vss С1JL - с is см'' с II С18 ' м? 1.ЕММИШ# PLCC44 P0.9/RXD1/MAT2.2 P0.8/TXD1/MAT2.1 P0.7/SSEL0/MAT2.0 DBGSEL RTXC2 Рис, 7,2, Топологическая схема корпуса PLCC44 микроконтроллеров LPC2101/02/03
Глава 7. Цоколевка и назначение выводов 121 Таблица 7.1. Описание выводов устройств LPC2101/02/03 Название Номер вывода Ъш Описание LQFP-48 PLCC-44 Р0.0...Р0.31 ,13...16,18, 21...24, 28...30, 32...39, 41, 44...48 2...9, 13...15, 18, 19, 20...22, 25...28, 31...33, 35...41,43 I/O Порт 0: порт 0 — 32-битный двунаправленный порт вво- да/вывода с индивидуальным заданием направления для каждого бита. Функция каждой линии порта 0 выбирается через блок коммутации выводов. Линия Р0.31 является только выходом 13° 18'» I/O РО.О Линия ввода/вывода общего назначения (GPIO) О TxDO Выход передатчика UART0 О МАТ3.1 Выход PWM TIMER3, канал 1 142) 192) I/O РОЛ Линия ввода/вывода общего назначения (GPIO) I RxDO Вход приемника UART0 О МАТ3.2 Выход PWM TIMER3, канал 2 183) 223) I/O Р0.2 Линия ввода/вывода общего назначения (GPIO) I/O SCL0 Вход-выход синхронизации 12С. Выход с откры- тым коллектором (в режиме 12С) I САРО.О Вход захвата TIMER0, канал 0 213> 253) I/O РО.З Линия ввода/вывода общего назначения (GPIO) I/O SDA0 Вход-выход данных 12С. Выход с открытым кол- лектором (в режиме 12С) О МАТО.О Выход PWM TIMER0, канал 0 22") 264) I/O РОЛ Линия ввода/вывода общего назначения (GPIO) I/O SCK0 Вывод последовательной синхронизации SPIO. Выход синхронизации SPI ведущего или вход ве- домого I САРОЛ Вход захвата TIMER0, канал 1 234) 274) I/O Р0.5 Линия ввода/вывода общего назначения (GPIO) I/O MISOO Вход ведущего/выход ведомого SPIO. Вход данных SPI ведущего или выход данных SPI ведомого О МАТОЛ Выход PWM TIMER0, канал 1 244) 284) I/O Р0.6 Линия ввода/вывода общего назначения (GPIO) I/O MOSIO Выход ведущего-вход ведомого SPIO. Выход дан- ных SPI ведущего или вход данных SPI ведомого I САРОЛ Вход захвата TIMER0, канал 2 282) 312) I/O Р0.7 Линия ввода/вывода общего назначения (GPIO) I SSEL0 Выбор ведомого SPIO. Выбирает интерфейс SPI в качестве ведомого О МАТ2.0 Выход PWM TIMER2, канал 0
122 Глава 7. Цоколевка и назначение выводов Таблица 7.1. Описание выводов устройств LPC2101/02/03 (продолжение) Название Номер вывода Ъш Описание LQFP-48 PLCC-44 Р0.0...Р0.31 294) 324) I/O Р0.8 Линия ввода/вывода общего назначения (GPIO) О TxDl Выход передатчика UART1 О МАТ2.1 Выход PWM TIMER2, канал 1 302> 332> I/O Р0.9 Линия ввода/вывода общего назначения (GPIO) I RxDl Вход приемника UART1 О МАТ2.2 Выход PWM TIMER2, канал 2 354> 384> I/O Р0.10 Линия ввода/вывода общего назначения (GPIO) О RTS1 Выход запроса посылки UART1 I CAP1.0 Вход захвата TIMER1, канал 0 I AD0.3 Аналоговый вход 3 З63> З93) I/O P0.11 Линия ввода/вывода общего назначения (GPIO) I CTS1 Вход сброса посылки UART1 I CAP1.1 Вход захвата TIMER1, канал 1 I AD0.4 Аналоговый вход 4 374) 404) I/O P0.12 Линия ввода/вывода общего назначения (GPIO) I DSR1 Вход готовности данных UART1 О MAT1.0 Выход PWM TIMER1, канал 0 I AD0.5 Аналоговый вход 5 414) 4з4) I/O P0.13 Линия ввода/вывода общего назначения (GPIO) О DTR1 Выход готовности данных терминала UART1 О MAT1.1 Выход PWM TIMER1, канал 1 443) 23> I/O P0.14 Линия ввода/вывода общего назначения (GPIO) I DCD1 Вход обнаружения несущей данных UART1 I/O SCK1 Вывод последовательной синхронизации SPI1. Выход синхронизации SPI ведущего или вход ве- домого I EINT1 Вход внешнего прерывания 1 454) 34> I/O P0.15 Линия ввода/вывода общего назначения (GPIO) I Rll Вход индикатора вызова UART1 I EINT2 Вход внешнего прерывания 2 462> 42> I/O P0.16 Линия ввода/вывода общего назначения (GPIO) I EINTO Вход внешнего прерывания 0 О MAT0.2 Выход PWM TIMER0, канал 2
Глава 7. Цоколевка и назначение выводов 123 Таблица 7.1. Описание выводов устройств LPC2101/02/03 (продолжение) Название Номер вывода Ъш Описание LQFP-48 PLCC-44 Р0.0...Р0.31 47” 5” I/O Р0.17 Линия ввода/вывода общего назначения (GPIO) I САР1.2 Вход захвата TIMER1, канал 2 I/O SCL1 Вход-выход синхронизации 12С. Выход с откры- тым коллектором (в режиме 12С) 48° 6') I/O Р0.18 Линия ввода/вывода общего назначения (GPIO) I САР1.3 Вход захвата TIMER1, канал 3 I/O SDA1 Вход-выход данных 12С1. Выход с открытым кол- лектором (в режиме 12С) 1') 7') I/O Р0.19 Линия ввода/вывода общего назначения (GPIO) О МАТ1.2 Выход PWM TIMER1, канал 2 I/O MISO1 Вход ведущего/выход ведомого SPIO. Вход данных SPI ведущего или выход данных SPI ведомого 22’ 82> I/O Р0.20 Линия ввода/вывода общего назначения (GPIO) О МАТ1.3 Выход PWM TIMER1, канал 3 I/O MOSI1 Выход ведущего/вход ведомого SPIO. Выход данных SPI ведущего или вход данных SPI ведомого 34> 94’ I/O Р0.21 Линия ввода/вывода общего назначения (GPIO) I SSEL1 Выбор ведомого SPI1. Выбирает интерфейс SPI в качестве ведомого О МАТЗ.О Выход PWM TIMER3, канал 0 324) 354) I/O Р0.22 Линия ввода/вывода общего назначения (GPIO) I AD0.0 Аналоговый вход 0 33 ° 36° I/O Р0.23 Линия ввода/вывода общего назначения (GPIO) I AD0.1 Аналоговый вход 1 34” 37” I/O Р0.24 Линия ввода/вывода общего назначения (GPIO) I AD0.2 Аналоговый вход 2 38’> 41” I/O Р0.25 Линия ввода/вывода общего назначения (GPIO) I AD0.6 Аналоговый вход 6 39° NC I/O Р0.26 Линия ввода/вывода общего назначения (GPIO) I AD0.7 Аналоговый вход 7 84) 134) I/O Р0.27 Линия ввода/вывода общего назначения (GPIO) I TRST Тестирование сброса для интерфейса JTAG I САР2.0 Вход захвата TIMER2, канал 0
124 Глава 7. Цоколевка и назначение выводов Таблица 7.1. Описание выводов устройств LPC2101/02/03 (продолжение) Название Номер вывода Ъш Описание LQFP-48 PLCC-44 Р0.0...Р0.31 9") 144) I/O Р0.28 Линия ввода/вывода общего назначения (GPIO) I TMS Тестирование выбора режима для интерфейса JTAG I САР2.1 Вход захвата TIMER2, канал 1 104) 154) I/O Р0.29 Линия ввода/вывода общего назначения (GPIO) I ТСК Тестирование синхронизации для интерфейса JTAG I САР2.2 Вход захвата TIMER2, канал 2 154’ 204) I/O РО.ЗО Линия ввода/вывода общего назначения (GPIO) I TDI Тестирование входных данных для интерфейса JTAG О МАТЗ.З Выход PWM TIMER3, канал 3 164) 214) О Р0.31 Линия только вывода общего назначения (GPIO) О TDO Тестирование выходных данных для интерфейса JTAG RTXC1 205) 245> I RTXC1 Вход подключения кварцевого резонатора к генератору RTC RTXC2 255) 295) О RTXC2 Выход подключения кварцевого резонатора к генератору RTC RTCK 265> NC I/O RTCK Возврат дополнительного сигнала тестирования синхронизации, который добавляется к JTAG- порту и помогает синхронизации отладчика, когда частота процессора изменяется. Двунаправленная линия ввода/вывода со встроенным подтягиваю- щим к «плюсу» питания резистором RST 6 11 I Вход внешнего сброса: НИЗКИЙ внешний уровень на этом выводе сбрасывает микроконтроллер (при этом, состояния портов ввода/вывода и периферийных устройствах устанав- ливаются по умолчанию и процессор начинает выполнение программы с адреса 0). Это ТТЛ-вход с гистерезисом и до- пустимым входным напряжением 5 В XI 11 16 I Вход схемы генератора и внутренних цепей генератора син- хросигнала Х2 12 17 О Выход усилителя генератора DBGSEL 27 30 I Вход выбора отладки: НИЗКИЙ внешний уровень соответс- твует нормальному режиму. ВЫСОКИЙ внешний уровень вызывает переход в режим отладки. Вход имеет встроенный подтягивающий к «плюсу» питания резистором Vss 7, 19, 43 1, 12, 23 I Заземление: потенциал 0 В VsSA 31 34 I Аналоговое заземление: потенциал 0 В. Несмотря на то что потенциалы входов VSSA и Vss номинально одинаковы, эти входы должны быть изолированы друг от друга, чтобы ми- нимизировать шумы и ошибки АЦП VdD(!V8) 5 10 I 1.8-В электропитание ядра: напряжение питания для внут- ренних схем микроконтроллера, в т. ч. процессорного ядра Vbat 4 NC I 3.3-В электропитание модуля RTC: напряжение питания для модуля RTC
Глава 7. Цоколевка и назначение выводов 125 Таблица 7.1. Описание выводов устройств LPC2101/02/03 (продолжение) Название Номер вывода Ъш Описание LQFP-48 PLCC-44 VdD(3V3) 17, 40 42 I 3.3-В электропитание портов ввода/вывода: напряжение пи- тания для портов ввода/вывода. Используется также в ка- честве питающего напряжения для АЦП Vdda 42 44 I Аналоговое 3.3-В электропитание ввода/вывода: Несмотря на то что потенциалы входов VDD(3V3 и VDDA номинально одинаковы, эти входы должны быть изолированы друг от друга, чтобы минимизировать шумы и ошибки АЦП. Ис- пользуется также в качестве питающего напряжения для PLL Обладает толерантностью к напряжению 5 В (т. е. допускает подачу входного напряжения 5 В) и имеет гистерезис 10 нс при изменении уровней ТТЛ. 2) Обладает толерантностью к напряжению 5 В и имеет гистерезис 10 нс при изменении уров- ней ТТЛ. Если линия сконфигурирована в качестве входа, то используется внутренний фильтр для импульсов длительностью менее 3 нс. 3) Обладает толерантностью к напряжению 5 В (используется в случае обмена со скоростью до 400 кГц). Требует внешнего подтягивающего к «плюсу» питания резистора. 4) Обладает толерантностью к напряжению 5 В и имеет гистерезис 10 нс при изменении уров- ней ТТЛ. Если линия сконфигурирована в качестве входа, то она имеет внутренний фильтр для импульсов длительностью менее 3 нс. Если линия сконфигурирована в качестве входа АЦП, то ее цифровая функция заблокирована. 5) Имеет специальные аналоговые функции. Описание выводов микроконтроллеров LPC2104/05/06 с указанием их аль- тернативных функций приведено в Табл. 7.2. Топологическая схема корпуса микроконтроллеров LPC2104/05/06 с указанием номеров и функций выводов приведена на Рис. 7.3. СО Г* UJ 4J UJ WI -7 Г ™ £££££^>^£^£££ Р0.19/МАТ1.2/ТСК P0.20/MAT1.3/TDI P0.21/PWM5/TDO NC УРР1.8 RST VSS1 P0.27/TRACEPKT0/TRST P0.28/TRACEPKT1/TMS P0.29/TRACEPKT2/TCK Х1 Х2 /WWtWWWtq с 1 '. , . , . с 2- 5 ' ' „ сэ ' '' , ". ' '' W С 4 ' ? LPC2104/05/06 с Э/ , ' ' ' . ' ' , C1I ' ' ей ' ' : '' . 2Йз С12 v , . ' ' ; 25 J Р0.11/CTS1/CAP1.1 P0.10/RTS1/CAP1.0 P0.24/PIPESTAT1 P0.23/PIPESTAT0 P0.22/TRACECLK VSS3 P0.9/RxD1/PWM6 P0.8/TxD1/PWM4 P0.7/SSEL/PWM2 DBGSEL RTCK NC Рис. 7.3. Топологическая схема корпуса LQFP48 микроконтроллеров LPC2104/05/06
126 Глава 7. Цоколевка и назначение выводов Таблица 7.2. Описание выводов микроконтроллеров LPC2104/05/06 Название Номер вывода Ъш Описание Р0.0...Р0.31 1...3, 8...10, 13...16,18, 21...24, 28...30, 32...39, 41,44...48 I/O Порт 0: порт 0 — 32-битный двунаправленный порт ввода/вывода с ин- дивидуальным заданием направления для каждого бита. Функция каж- дой линии порта 0 выбирается через блок коммутации выводов 13 I/O РО.О Линия ввода/вывода общего назначения (GPIO) О TxDO Выход передатчика UART0 О PWM1 Выход 1 PWM 14 I/O РОЛ Линия ввода/вывода общего назначения (GPIO) I RxDO Вход приемника UART0 О PWM3 Выход 3 PWM 18 I/O Р0.2 Линия ввода/вывода общего назначения (GPIO) I/O SCL Вход-выход синхронизации 12С. Выход с открытым кол- лектором (в режиме 12С) I САРО.О Вход захвата TIMER0, канал 0 21 I/O РО.З Линия ввода/вывода общего назначения (GPIO) I/O SDA Вход-выход данных 12С. Выход с открытым коллектором (в режиме 12С) О МАТО.О Выход совпадения TIMER0, канал 0 22 I/O Р0.4 Линия ввода/вывода общего назначения (GPIO) I/O SCK Вывод последовательной синхронизации SPL Выход синх- ронизации SPI ведущего или вход ведомого I САР0Л Вход захвата TIMER0, канал 1 23 I/O Р0.5 Линия ввода/вывода общего назначения (GPIO) I/O MISO Вход ведущего/выход ведомого SPI. Вход данных SPI веду- щего или выход данных SPI ведомого О МАТ0Л Выход совпадения TIMER0, канал 1 24 I/O Р0.6 Линия ввода/вывода общего назначения (GPIO) I/O MOSI Выход ведущего/вход ведомого SPI. Выход данных SPI ведущего или вход данных SPI ведомого I САР0.2 Вход захвата TIMER0, канал 2 28 I/O Р0.7 Линия ввода/вывода общего назначения (GPIO) I SSEL Выбор ведомого SPI. Выбирает интерфейс SPI в качестве ведомого О PWM2 Выход PWM 2 29 I/O Р0.8 Линия ввода/вывода общего назначения (GPIO) О TxDl Выход передатчика UART1 о PWM4 Выход PWM 4 30 I/O Р0.9 Линия ввода/вывода общего назначения (GPIO) I RxDl Вход приемника UART1 О PWM6 Выход PWM 6
Глава 7. Цоколевка и назначение выводов 127 Таблица 7,2. Описание выводов микроконтроллеров LPC2104/05/06 (продолжение) Название Номер вывода Ъш Описание Р0.О...РО.31 35 I/O Р0.10 Линия ввода/вывода общего назначения (GPIO) О RTS1 Выход запроса посылки UART1 I САР1.0 Вход захвата TIMER1, канал 0 36 I/O Р0.11 Линия ввода/вывода общего назначения (GPIO) I CTS1 Вход сброса посылки UART1 I САР1.1 Вход захвата TIMER1, канал 1 37 I/O Р0.12 Линия ввода/вывода общего назначения (GPIO) I DSR1 Вход готовности данных UART1 О МАТ1.0 Выход совпадения TIMER1, канал 0 41 I/O РОЛЗ Линия ввода/вывода общего назначения (GPIO) О DTR1 Выход готовности данных терминала UART1 О МАТ1.1 Выход совпадения TIMER1, канал 1 44 I/O РОЛ 4 Линия ввода/вывода общего назначения (GPIO) I DCD1 Вход обнаружения несущей данных UART1 I EINT1 Вход внешнего прерывания 1 45 I/O Р0.15 Линия ввода/вывода общего назначения (GPIO) I RI1 Вход индикатора вызова UART1 I EINT2 Вход внешнего прерывания 2 46 I/O Р0Л6 Линия ввода/вывода общего назначения (GPIO) I EINT0 Вход внешнего прерывания 0 О МАТ0.2 Выход совпадения TIMER0, канал 2 47 I/O Р0Л7 Линия ввода/вывода общего назначения (GPIO) I САР1.2 Вход захвата TIMER1, канал 2 I TRST Тестирование сброса для первого интерфейса JTAG 48 I/O Р0Л8 Линия ввода/вывода общего назначения (GPIO) I САР1.3 Вход захвата TIMER1, канал 3 I TMS Тестирование выбора режима для первого интерфейса JTAG 1 I/O Р0Л9 Линия ввода/вывода общего назначения (GPIO) О МАТ1.2 Выход совпадения TIMER1, канал 2 I ТСК Тестирование синхронизации для первого интерфейса JTAG 2 I/O Р0.20 Линия ввода/вывода общего назначения (GPIO) О МАТ1.3 Выход совпадения TIMER1, канал 3 I TDI Тестирование входных данных для первого интерфейса JTAG 3 I/O Р0.21 Линия ввода/вывода общего назначения (GPIO) О PWM5 Выход PWM 5 О TDO Тестирование выходных данных для интерфейса JTAG
128 Глава 7. Цоколевка и назначение выводов Таблица 7.2. Описание выводов микроконтроллеров LPC2104/05/06 (продолжение) Название Номер вывода Ъш Описание Р0.0...Р0.31 32 I/O Р0.22 Линия ввода/вывода общего назначения (GPIO) О TRACECLK Тактирование трассировки 33 I/O Р0.23 Линия ввода/вывода общего назначения (GPIO) о PIPESTAT0 Состояние конвейера, бит 0 34 I/O Р0.24 Линия ввода/вывода общего назначения (GPIO) О PIPESTAT1 Состояние конвейера, бит 1 38 I/O Р0.25 Линия ввода/вывода общего назначения (GPIO) О PIPESTAT2 Состояние конвейера, бит 2 39 I/O Р0.26 Линия ввода/вывода общего назначения (GPIO) О TRACESYNC Синхронизация трассировки 8 I/O Р0.27 Линия ввода/вывода общего назначения (GPIO) о TRACEPKT0 Трассировка пакетов, бит 0 I TRST Тестирование сброса для второго интерфейса JTAG 9 I/O Р0.28 Линия ввода/вывода общего назначения (GPIO) О TRACEPKT1 Трассировка пакетов, бит 1 I TMS Тестирование выбора режима для второго интерфейса JTAG 10 I/O Р0.29 Линия ввода/вывода общего назначения (GPIO) О TRACEPKT2 Трассировка пакетов, бит 2 I ТСК Тестирование синхронизации для второго интерфейса JTAG 15 I/O Р0.30 Линия ввода/вывода общего назначения (GPIO) О TRACEPKT3 Трассировка пакетов, бит 3 I TDI Тестирование входных данных для второго интерфейса JTAG 16 I/O Р0.31 Линия только вывода общего назначения (GPIO) I EXTIN0 Внешний триггерный вход О TDO Тестирование выходных данных для второго интерфейса JTAG RTCK 26 I/O RTCK Возврат дополнительного сигнала тестирования синхрони- зации, который добавляется к JTAG-порту и помогает син- хронизации отладчика, когда частота процессора изменя- ется. Двунаправленная линия ввода/вывода с встроенным подтягивающим к «плюсу» питания резистором RST 6 I Вход внешнего сброса: НИЗКИЙ внешний уровень на этом выводе сбра- сывает микроконтроллер (при этом состояния портов ввода/вывода и периферийных устройствах устанавливаются по умолчанию и процессор начинает выполнение программы с адреса 0) XI 11 I Вход схемы генератора и внутренних цепей генератора синхросигнала Х2 12 О Выход усилителя генератора DBGSEL 27 I Вход выбора отладки: НИЗКИЙ внешний уровень соответствует нор- мальному режиму. ВЫСОКИЙ внешний уровень вызывает переход в режим отладки. Вход с встроенным подтягивающим к «плюсу» пита- ния резистором
Глава 7. Цоколевка и назначение выводов и 129 Таблица 7.2. Описание выводов микроконтроллеров LPC2104/05/06 (продолжение) Название Номер вывода Ъш Описание Vss 7, 19,31, 43 I Заземление: потенциал 0 В VdDI.8 5 I 1.8-В электропитание ядра: напряжение питания для внутренних схем микроконтроллера, в т. ч. процессорного ядра Vdd3 17, 40 I 3.3-В электропитание ввода/вывода: напряжение питания для портов ввода/вывода NC 4, 20, 25, 42 Неподключенные выводы Описание выводов микроконтроллеров LPC2114/24 с указанием их альтер- нативных функций приведено в Табл. 7.3. Топологическая схема корпуса мик- роконтроллеров LPC2114/24 с указанием номеров и функций выводов приведе- на на Рис. 7.4. P0.21/PWM5/CAP1.3 Р0.22/САР0.0/МАТ0.0 Р0.23 P1.19/TRACEPKT3 Р0.24 Vss V3A P1.18/TRACEPKT2 Р0.25 NC P0.27/AIN0/CAP0.1 /MATO. 1 P1.17/TRACEPKT1 P0.28/AIN1/CAP0.2/MAT0.2 P0.29/AIN2/CAP0.3/MAT0.3 P0.30/AIN3/EINT3/CAP0.0 P1.16/TRACEPKT0 P1.20/TRACESYNC Р0.17/САР1.2/SCK1/MAT1.2 Р0.16./EINT0/MAT0.2/CAP0.2 P0.15/RI1/EINT2 P1.21/PIPESTAT0 V3 Vss P0.14/DCD1/EINT1 P1.22/PIPESTAT1 P0.13/DTR1/MAT1.1 P0.12/DSR1/MAT1.0 Р0.11/CTS1/CAP1.1 P1.23/PIPESTAT2 P0.10/RTS1/CAP1.0 P0.9/RxD1/PWM6/EINT3 P0.8/TxD1/PWM4 Рис. 7.4. Топологическая схема корпуса LQFP64 микроконтроллеров LPC2114/24 304
130 Глава 7. Цоколевка и назначение выводов Таблица 7.3. Описание выводов микроконтроллеров LPC2114/24 Название Номер вывода Ъш Описание Р0.0...Р0.31 1...3, 5, 9, 11,13...15, 19,21,22, 26, 27, 29...31, 33...35, 37...39,41, 45...47, 53...55 I/O Порт 0: порт 0 — 32-битный двунаправленный порт ввода/вывода с индивидуальным заданием направления для каждого бита. Функ- ция каждой линии порта 0 выбирается через блок коммутации вы- водов. Выводы 26 и 31 порта 0 не доступны. Примечание. Все выводы порта 0, исключая те, которые могут ис- пользоваться как входы АЦП (Р0.27, Р0.28, Р0.29 и РО.ЗО), имеют до- пустимое входное напряжение 5 В. Если АЦП не задействован, то вы- воды, связанные с АЦП, могут также использоваться как цифровые выводы I/O с допустимым входным напряжением 5 В. Номинальные электрические параметры входов АЦП см. в Приложении 3. 19 I/O РО.О Линия ввода/вывода общего назначения (GPIO) О TxDO Выход передатчика UART0 о PWM1 Выход широтно-импульсного модулятора 1 21 I/O РОЛ Линия ввода/вывода общего назначения (GPIO) I RxDO Вход приемника UART0 О PWM3 Выход широтно-ймпульсного модулятора 3 I EINT0 Вход внешнего прерывания 0 22 I/O Р0.2 Линия ввода/вывода общего назначения (GPIO) I/O SCL Вход-выход синхронизации 12С. Выход с открытым коллектором (в режиме 12С) I САРО.О Вход захвата TIMER0, канал 0 26 I/O РО.З линия ввода/вывода общего назначения (GPIO) I/O SDA Вход-выход данных 12С. Выход с открытым коллек- тором (в режиме 12С) О МАТО.О Выход совпадения TIMER0, канал 0 I EINT1 Вход внешнего прерывания 1 27 I/O РОЛ Линия ввода/вывода общего назначения (GPIO) I/O SCK0 Вывод последовательной синхронизации SPIO. Вы- ход синхронизации SPI ведущего или вход ведомого I САР0.1 Вход захвата TIMER0, канал 1 29 I/O Р0.5 Линия ввода/вывода общего назначения (GPIO) I/O MISOO Вход ведущего-выход ведомого SPIO. Вход данных SPI ведущего или выход данных SPI ведомого О МАТ0.1 Выход совпадения TIMER0, канал 1 30 I/O Р0.6 Линия ввода/вывода общего назначения (GPIO) I/O MOSIO Выход ведущего-вход ведомого SPIO. Выход данных SPI ведущего или вход данных SPI ведомого I. САР0.2 Вход захвата TIMER0, канал 2 31 I/O РОЛ Линия ввода/вывода общего назначения (GPIO) I SSEL0 Выбор ведомого SPIO. Выбирает интерфейс SPI в ка- честве ведомого О PWM2 Выход широтно-импульсного модулятора 2 I EINT2 Вход внешнего прерывания 2
Глава 7. Цоколевка и назначение выводов 131 Таблица 7.3. Описание выводов микроконтроллеров LPC2114/24 (продолжение) Название Номер вывода Тип Описание Р0.0...Р0.31 33 I/O Р0.8 Линия ввода/вывода общего назначения (GPIO) О TxDl Выход передатчика UART1 О PWM4 Выход широтно-импульсного модулятора 4 34 I/O Р0.9 Линия ввода/вывода общего назначения (GPIO) I RxDl Вход приемника UART1 О PWM6 Выход широтно-импульсного модулятора 6 I EINT3 Вход внешнего прерывания 3 35 I/O Р0.10 Линия ввода/вывода общего назначения (GPIO) О RTS1 Выход запроса посылки UART1 I CAP1.0 Вход захвата TIMER1, канал 0 37 I/O P0.11 Линия ввода/вывода общего назначения (GPIO) I CTS1 Вход сброса посылки UART1 I CAP1.1 Вход захвата TIMER1, канал 1 38 I/O P0.12 Линия ввода/вывода общего назначения (GPIO) I DSR1 Вход готовности данных UART1 О MAT1.0 Выход совпадения TIMER1, канал 0 39 I/O P0.13 Линия ввода/вывода общего назначения (GPIO) О DTR1 Выход готовности данных терминала UART1 О MAT1.1 Выход совпадения TIMER1, канал 1 41 I/O P0.14 Линия ввода/вывода общего назначения (GPIO) I DCD1 Вход обнаружения несущей данных UART1 I EINT1 Вход внешнего прерывания 1. Примечание. НИЗКИЙ уровень на выводе РО. 14, в то время как на выводе RESET также НИЗКИЙ уро- вень, приводит к передаче управления встроенному загрузчику после завершения сброса. 45 I/O P0.15 Линия ввода/вывода общего назначения (GPIO) I RI1 Вход индикатора вызова UART1 I EINT2 Вход внешнего прерывания 2 46 I/O P0.16. Линия ввода/вывода общего назначения (GPIO) I EINTO Вход внешнего прерывания 0 О MAT0.2 Выход совпадения TIMER0, канал 2 I CAP0.2 Вход захвата TIMER0, канал 2 47 I/O P0.17 Линия ввода/вывода общего назначения (GPIO) I CAP1.2 Вход захвата TIMER1, канал 2 I/O SCK1 Вывод последовательной синхронизации SPI1. Вы- ход синхронизации SPI ведущего или вход ведомого О MAT1.2 Выход совпадения TIMER1, канал 2
132 Глава 7. Цоколевка и назначение выводов Таблица 7,3. Описание выводов микроконтроллеров LPC2114/24 (продолжение) Название Номер вывода Тип Описание Р0.0...Р0.31 53 I/O РОЛ 8 Линия ввода/вывода общего назначения (GPIO) I САР1.3 Вход захвата TIMER1, канал 3 I/O MISO1 Вход ведущего-выход ведомого SPI1. Вход данных SPI ведущего или выход данных SPI ведомого О МАТ1.3 Выход совпадения TIMER1, канал 3 54 I/O Р0.19 Линия ввода/вывода общего назначения (GPIO) О МАТ1.2 Выход совпадения TIMER1, канал 2 I/O MOSI1 Выход ведущего-вход ведомого SPIO. Выход данных SPI ведущего или вход данных SPI ведомого I САР1.2 Вход захвата TIMER1, канал 2 55 I/O Р0.20 Линия ввода/вывода общего назначения (GPIO) О МАТ1.3 Выход совпадения TIMER1, канал 3 I SSEL1 Выбор ведомого SPI1. Выбирает интерфейс SPI в ка- честве ведомого I EINT3 Вход внешнего прерывания 3 1 I/O Р0.21 Линия ввода/вывода общего назначения (GPIO) О PWM5 Выход широтно-импульсного модулятора 5 I САР1.3 Вход захвата TIMER1, канал 3 2 I/O Р0.22 Линия ввода/вывода общего назначения (GPIO) I САРО.О Вход захвата TIMER0, канал 0 О МАТО.О Выход совпадения TIMER0, канал 0 3 I/O Р0.23 Линия ввода/вывода общего назначения (GPIO) 5 I/O Р0.24 Линия ввода/вывода общего назначения (GPIO) 9 I/O Р0.25 Линия ввода/вывода общего назначения (GPIO) 11 I/O Р0.27 Линия ввода/вывода общего назначения (GPIO) I AINO АЦП вход 0. Этот аналоговый вход всегда подклю- чен к данному выводу I САР0.1 Вход захвата TIMER0, канал 1 О MATO Л Выход совпадения TIMER0, канал 1 13 I/O Р0.28 Линия ввода/вывода общего назначения (GPIO) I AIN1 АЦП вход 1. Этот аналоговый вход всегда подклю- чен к данному выводу I САР0.2 Вход захвата TIMER0, канал 2 О МАТ0.2 Выход совпадения TIMER0, канал 2 14 I/O Р0.29 Линия ввода/вывода общего назначения (GPIO) I AIN2 АЦП вход 2. Этот аналоговый ввод всегда подклю- чен к данному выводу I САРО.З Вход захвата TIMER0, канал 3 О МАТО.З Выход совпадения TIMER0, канал 3
Глава 7. Цоколевка и назначение выводов 133 Таблица 7.3. Описание выводов микроконтроллеров LPC2114/24 (продолжение) Название Номер вывода Тип Описание Р0.0...Р0.31 15 I/O РО.ЗО Линия ввода/вывода общего назначения (GPIO) I AIN3 АЦП вход 3. Этот аналоговый ввод всегда подклю- чен к данному выводу I EINT3 Вход внешнего прерывания 3 I САРО.О Вход захвата TIMER0, канал 0 Р1.16...Р1.31 4, 8, 12, 16,20,24, 28, 32,36, 40,44,48, 52,56,60, 64 I/O Порт 1: порт 1 — 32-битный двунаправленный порт ввода/вывода с индивидуальным заданием направления для каждого бита. Функ- ция каждой линии порта 1 выбирается через блок коммутации вы- водов. Только выводы 16...31 порта 1 доступны. Примечание. Все выводы порта 1 допускают подачу внешнего напряжения 5 В и имеют встроенные подтягивающие к «плюсу» питания резисторы, которые задают ВЫСОКИЙ уровень на выводе, когда этот вывод используется как вход. 16 I/O Р1.16 Линия ввода/вывода общего назначения (GPIO) О TRACEPKT0 Трассировка пакетов, бит 0 12 I/O Р1.17 линия ввода/вывода общего назначения (GPIO) О TRACEPKT1 Трассировка пакетов, бит 1 8 I/O Р1.18 Линия ввода/вывода общего назначения (GPIO) О TRACEPKT2 Трассировка пакетов, бит 2 4 I/O Р1.19 Линия ввода/вывода общего назначения (GPIO) О TRACEPKT3 Трассировка пакетов, бит 3 48 I/O Р1.20 Линия ввода/вывода общего назначения (GPIO) О TRACESYNC Синхронизация трассировки. Примечание. НИЗКИЙ внешний уровень на выводе Р1.20, в то время как на выводе RESET также при- сутствует НИЗКИЙ уровень, разрешает работу вы- водов Р1.25:16 в качестве линий трассировки паке- тов после завершения сброса. 44 I/O Р1.21 Линия ввода/вывода общего назначения (GPIO) О PIPESTAT0 Состояние конвейера, бит 0 40 I/O Р1.22 Линия ввода/вывода общего назначения (GPIO) О PIPESTAT1 Состояние конвейера, бит 1 36 I/O Р1.23 Линия ввода/вывода общего назначения (GPIO) О PIPESTAT2 Состояние конвейера, бит 2 32 I/O Р1.24 Линия ввода/вывода общего назначения (GPIO) О TRACECLK Тактирование трассировки 28 I/O Р1.25 Линия ввода/вывода общего назначения (GPIO) I EXTIN0 Внешний триггерный вход 24 I/O Р1.26 Линия ввода/вывода общего назначения (GPIO)
134 Глава 7. Цоколевка и назначение выводов Таблица 7.3. Описание выводов микроконтроллеров LPC2114/24 (продолжение) Название Номер вывода Тип Описание Р1.16...Р1.31 24 I/O RTCK Возврат дополнительного сигнала тестирования синхронизации, который добавляется к JTAG-порту и помогает синхронизации отладчика, когда частота процессора изменяется. Двунаправленная линия ввода/вывода с встроенным подтягивающим к «плюсу» питания резистором. Примечание. НИЗКИЙ внешний уровень на выводе Р1.26, в то время как на выводе RESET также при- сутствует НЙЗКИЙ уровень, разрешает работу вы- водов Р 1.31:26 в качестве порта отладки после завер- шения сброса. 64 I/O Pl.27 Линия ввода/вывода общего назначения (GPIO) 0 TDO Тестирование выходных данных для интерфейса JTAG 60 I/O Pl.28 Линия ввода/вывода общего назначения (GPIO) I TDI Тестирование входных данных для интерфейса JTAG 56 I/O Pl.29 Линия ввода/вывода общего назначения (GPIO) I TCK Тестирование синхронизации для интерфейса JTAG 52 I/O Pl.30 Линия ввода/вывода общего назначения (GPIO) I TMS Тестирование выбора режима для интерфейса JTAG 20 I/O Pl.31 Линия ввода/вывода общего назначения (GPIO) I TRST Тестирование сброса для интерфейса JTAG NC 10 Вывод не подключен RESET 57 I Вход внешнего сброса: НИЗКИЙ внешний уровень на этом выводе сбрасывает микроконтроллер (при этом состояния портов ввода/вы- вода и периферийных устройствах устанавливаются по умолчанию и процессор начинает выполнение программы с адреса 0). Это ТТЛ- вход с гистерезисом и допустимым входным напряжением 5 В XTAL1 62 I Вход схемы генератора и внутренних цепей генератора синхросиг- нала XTAL2 61 0 Выход усилителя генератора Vss 6, 18, 25, 42, 50 I Заземление: потенциал 0 В VsSA 59 I Аналоговое заземление: потенциал 0 В. Несмотря на то что потенци- алы входов VSSA и Vss номинально одинаковы, эти входы должны быть изолированы друг от друга, чтобы минимизировать шумы и ошибки АЦП ViSA_PLL 58 I PLL аналоговое заземление: потенциал 0 В. Несмотря на то что по- тенциалы входов VSSA PLL и Vss номинально одинаковы, эти входы должны быть изолированы друг от друга, чтобы минимизировать шумы и ошибки АЦП V18 17,49 I 1.8-В электропитание ядра: напряжение питания для внутренних схем микроконтроллера, в т. ч. процессорного ядра VI8A 63 I Аналоговое 1.8-В электропитание ядра: напряжение питания для внутренних схем микроконтроллера. Несмотря на то что потенциа- лы входов V]8 и V]8A номинально одинаковы, эти входы должны быть изолированы друг от друга, чтобы минимизировать шумы и ошибки АЦП
Глава 7. Цоколевка и назначение выводов 135 Таблица 7.3. Описание выводов микроконтроллеров LPC2114/24 (продолжение) Название Номер вывода Тип Описание V3 23,43,51 I 3.3-В электропитание ввода/вывода: напряжение питания для пор- тов ввода/вывода V3A 7 I Аналоговое 3.3-В электропитание ввода/вывода: несмотря на то что потенциалы входов V3 и V3A номинально одинаковы, эти входы должны быть изолированы друг от друга, чтобы минимизировать шумы и ошибки АЦП. Используется также в качестве опорного на- пряжения для АЦП Описание выводов микроконтроллеров LPC2119/29/94 с указанием их альтернативных функций приведено в Табл. 7.4. Топологическая схема корпуса микроконтроллеров LPC2119/29/94 с указанием номеров и функций выводов приведена на Рис. 7.5. P0.21/PWM5/RD31)/CAP1.3 Р0.22 /ТОЗ’/САРО.О./МАТО.О P0.23./RD2 Р1.19 /TRACEPKT3 P0.24/TD2 Vss V3A P1.18/TRACEPKT2 P0.25./RD1 TD1 P0.27/AIN0 /CAPO. 1/MATO. 1 P1.17/TRACEPKT1 P0.28/AIN1/CAP0.2 /МАТ0.2 P0.29/AIN2/CAP0.3/MAT0.3 P0.30/AIN3./EINT3/CAP0.0 P1.16 /TRACEPKTO Г. J c 2' Л / / - S - 4$з C4 \ ,./.4j3 t ' '< '' S )Йз l r ' //: ; J з 18 • : . - - ' • -413 E®,' : ’-'-'.fij С Ш 3 c 11 \ " 33 з СЙ - ' ? Л'/ 3*3 t»-. ..\!.''.:-жз t« •• ‘...-4 t*. .•'!.s;.®3 P1.20 /TRACESYNC P0.17/CAP1.2/SCK1 /МАТ1.2 PO. 16/EINT0/MAT0.2/CAP0.2. P0.15/RI1/EINT2. P1.21 /PIPESTATO V3 Vss P0.14/DCD1/EINT1 P1.22/PIPESTAT1 PO.IS/DTRI/MATI.I/TDA1’ P0.12/DSR1/MAT1.0/RD41) PO.11/CTS1/CAP1.1 P1.23/PIPESTAT2. P0.10/RTS1./CAP1.0 P0.9/RXD1/PWM6/EINT3 P0.8./TXD1/PWM4 n Только у LPC2194. Рис. 7.5. Топологическая схема корпуса LQFP64 микроконтроллеров LPC2119/29/94
136 Глава 7. Цоколевка и назначение выводов Таблица 7.4. Описание выводов микроконтроллеров LPC2119/29/94 Название Номер вывода Тйп Описание Р0.0...Р0.31 1...3,5,9, Н, 13...15, 19,21,22, 26, 27, 29...31, 33...35, 37...39, 41, 45...47, 53...55 I/O Порт 0: порт 0 — 32-битный двунаправленный порт ввода/вывода с индивидуальным заданием направления для каждого бита. Функция каждой линии порта 0 выбирается через блок коммутации выводов. Выводы 26 и 31 порта 0 не доступны. Примечание. Все выводы порта 0, исключая те, которые могут ис- пользоваться как входы АЦП (Р0.27, Р0.28, Р0.29 и РО.ЗО), имеют до- пустимое входное напряжение 5 В. Если АЦП не задействован, то выводы, связанные с АЦП, могут также использоваться как цифро- вые выводы I/O с допустимым входным напряжением 5 В. Номи- нальные электрические параметры входов АЦП см. в Приложении 3. 19 I/O РО.О Линия ввода/вывода общего назначения (GPIO) О TxDO Выход передатчика UART0 О PWM1 Выход широтно-импульсного модулятора 1 21 I/O РОЛ Линия ввода/вывода общего назначения (GPIO) I RxDO Вход приемника UART0 О PWM3 Выход широтно-импульсного модулятора 3 I EINT0 Вход внешнего прерывания 0 22 I/O Р0.2 Линия ввода/вывода общего назначения (GPIO) I/O SCL Вход-выход синхронизации 12С. Выход с открытым коллектором (в режиме 12С) I САРО.О Вход захвата TIMER0, канал 0 26 I/O РО.З Линия ввода/вывода общего назначения (GPIO) I/O SDA Вход-выход данных 12С. Выход с открытым коллек- тором (в режиме 12С) О МАТО.О Выход совпадения TIMER0, канал 0 I EINT1 Вход внешнего прерывания 1 27 I/O Р0.4 Линия ввода/вывода общего назначения (GPIO) I/O SCK0 Вывод последовательной синхронизации SPIO. Вы- ход синхронизации SPI ведущего или вход ведомого I САР0.1 Вход захвата TIMER0, канал 1 29 I/O Р0.5 Линия ввода/вывода общего назначения (GPIO) I/O MISOO Вход ведущего-выход ведомого SPIO. Вход данных SPI ведущего или выход данных SPI ведомого О МАТ0.1 Выход совпадения TIMER0, канал 1 30 I/O Р0.6 Линия ввода/вывода общего назначения (GPIO) I/O MOSIO Выход ведущего-вход ведомого SPIO. Выход данных SPI ведущего или вход данных SPI ведомого I САР0.2 Вход захвата TIMER0, канал 2 31 I/O РОЛ Линия ввода/вывода общего назначения (GPIO) I SSEL0 Выбор ведомого SPIO. Выбирает интерфейс SPI в ка- честве ведомого О PWM2 Выход широтно-импульсного модулятора 2 I EINT2 Вход внешнего прерывания 2
Глава 7. Цоколевка и назначение выводов 137 Таблица 7.4. Описание выводов микроконтроллеров LPC2119/29/94 (продолжение) Название Номер вывода Тип Описание Р0.0...Р0.31 33 I/O Р0.8. Линия ввода/вывода общего назначения (GPIO) О TxDl Выход передатчика UART1 О PWM4 Выход широтно-импульсного модулятора 4 34 I/O Р0.9 Линия ввода/вывода общего назначения (GPIO) I RxDl Вход приемника UART1 О PWM6 Выход широтно-импульсного модулятора 6 I EINT3 Вход внешнего прерывания 3 35 I/O Р0.10 Линия ввода/вывода общего назначения (GPIO) О RTS1 Выход запроса посылки UART1 I CAP1.0 Вход захвата TIMER1, канал 0 37 I/O P0.11 Линия ввода/вывода общего назначения (GPIO) I CTS1 Вход сброса посылки UART1 I CAP1.1 Вход захвата TIMER1, канал 1 38 I/O P0.12 Линия ввода/вывода общего назначения (GPIO) I DSR1 Вход готовности данных UART1 О MAT1.0 Выход совпадения TIMER1, канал 0 I RD4 CAN4 вход приемника (доступен только в LPC2194) 39 I/O P0.13 Линия ввода/вывода общего назначения (GPIO) О DTR1 Выход готовности данных терминала UART1 О MAT1.1 Выход совпадения TIMER1, канал 1 О TD4 CAN4 выход передатчика (доступен только в LPC2194) 41 i/o P0.14 Линия ввода/вывода общего назначения (GPIO) I DCD1 Вход обнаружения несущей данных UART1 I EINT1 Вход внешнего прерывания 1. Примечание. НИЗКИЙ уровень на выводе Р0.14, в то время как на выводе RESET также НИЗКИЙ уро- вень, приводит к передаче управления встроенному загрузчику после завершения сброса. 45 I/O P0.15 Линия ввода/вывода общего назначения (GPIO) I Rll Вход индикатора вызова UART1 I EINT2. Вход внешнего прерывания 2 46 I/O P0.16 Линия ввода/вывода общего назначения (GPIO) I EINTO Вход внешнего прерывания 0 О MAT0.2 Выход совпадения TIMER0, канал 2 I CAP0.2 Вход захвата TIMER0, канал 2
138 Глава 7. Цоколевка и назначение выводов Таблица 7.4. Описание выводов микроконтроллеров LPC2119/29/94 (продолжение) Название Номер вывода Тип Описание Р0.0..:Р0.31 47 I/O Р0.17 Линия ввода/вывода общего назначения (GPIO) I САР1.2 Вход захвата TIMER1, канал 2 I/O SCK1 Вывод последовательной синхронизации SPI1. Вы- ход синхронизации SPI ведущего или вход ведомого О МАТ1.2 Выход совпадения TIMER1, канал 2 53 I/O Р0.18, Линия ввода/вывода общего назначения (GPIO) I САР1.3 Вход захвата TIMER1, канал 3 I/O MISO1 Вход ведущего-выход ведомого SPI1. Вход данных SPI ведущего или выход данных SPI ведомого О МАТ1.3 Выход совпадения TIMER1, канал 3 54 I/O Р0.19 Линия ввода/вывода общего назначения (GPIO) О МАТ1.2 Выход совпадения TIMER1, канал 2 I/O MOSI1 Выход ведущего-вход ведомого SPIO. Выход данных SPI ведущего или вход данных SPI ведомого I САР1.2 Вход захвата TIMER1, канал 2 55 I/O Р0.20 Линия ввода/вывода общего назначения (GPIO) О МАТ1.3 Выход совпадения TIMER1, канал 3 I SSEL1 Выбор ведомого SPI1. Выбирает интерфейс SPI в ка- честве ведомого I EINT3 Вход внешнего прерывания 3 1 I/O Р0.21 Линия ввода/вывода общего назначения (GPIO) О PWM5 Выход широтно-импульсного модулятора 5 I RD3 CAN3 вход приемника (доступен только в LPC2194) I САР1.3 Вход захвата TIMER1, канал 3 2 I/O Р0.22 Линия ввода/вывода общего назначения (GPIO) О TD3 CAN3 выход передатчика (доступен только в LPC2194) I САРО.О Вход захвата TIMER0, канал 0 О МАТО.О Выход совпадения TIMER0, канал 0 3 I/O Р0.23 Линия ввода/вывода общего назначения (GPIO) I RD2 CAN2 вход приемника 5 I/O Р0.24 Линия ввода/вывода общего назначения (GPIO) О TD2 CAN2 выход передатчика 9 I/O Р0.25 Линия ввода/вывода общего назначения (GPIO) I RD1 CAN 1 вход приемника 11 I/O Р0.27 Линия ввода/вывода общего назначения (GPIO) I AINO АЦП вход 0. Этот аналоговый вход всегда подключен к данному выводу I САР0.1 Вход захвата TIMER0, канал 1 О МАТ0.1 Выход совпадения TIMER0, канал 1
Глава 7. Цоколевка и назначение выводов 139 Таблица 7.4. Описание выводов микроконтроллеров LPC2119/29/94 (продолжение) Название Номер вывода Тип Описание Р0.0...Р0.31 13 I/O Р0.28 Линия ввода/вывода общего назначения (GPIO) I AIN1 АЦП вход 1. Этот аналоговый вход всегда подключен к данному выводу I САР0.2 Вход захвата TIMER0, канал 2 О МАТ0.2 Выход совпадения TIMER0, канал 2 14 I/O Р0.29 Линия ввода/вывода общего назначения (GPIO) I AIN2 АЦП вход 2. Этот аналоговый ввод всегда подключен к данному выводу I САРО.З Вход захвата TIMER0, канал 3 О МАТО.З Выход совпадения TIMER0, канал 3 15 I/O РО.ЗО Линия ввода/вывода общего назначения (GPIO) I AIN3. АЦП вход 3. Этот аналоговый ввод всегда подключен к данному выводу I EINT3 Вход внешнего прерывания 3 I САРО.О Вход захвата TIMER0, канал 0 Р1.16...Р1.31 4, 8, 12, 16,20,24, 28,32,36, 40,44,48, 52,56,60, 64 I/O Порт 1: порт 1 — 32-битный двунаправленный порт ввода/вывода с индивидуальным заданием направления для каждого бита. Функция каждой линии порта 1 выбирается через блок коммутации выводов. Только выводы 16...31 порта 1 доступны. Примечание. Все выводы порта 1 допускают подачу внешнего напря- жения 5 В и имеют встроенные подтягивающие к «плюсу» питания резисторы, которые задают ВЫСОКИЙ уровень на выводах, ис- пользующихся в качестве входов. 16 I/O Р1.16 Линия ввода/вывода общего назначения (GPIO) О TRACEPKT0 Трассировка пакетов, бит 0 12 I/O Р1.17 Линия ввода/вывода общего назначения (GPIO) О TRACEPKT1 Трассировка пакетов, бит 1 8 I/O Р1.18 Линия ввода/вывода общего назначения (GPIO) О TRACEPKT2 Трассировка пакетов, бит 2 4 I/O Р1.19 Линия ввода/вывода общего назначения (GPIO) О TRACEPKT3 Трассировка пакетов, бит 3 48 I/O Р1.20 Линия ввода/вывода общего назначения (GPIO) О TRACESYNC Синхронизация трассировки. Примечание. НИЗКИЙ внешний уровень на выводе Р1.20, в то время как на выводе RESET также при- сутствует НИЗКИЙ уровень, разрешает работу выво- дов Р1.25:16 в качестве линий трассировки пакетов после завершения сброса. 44 I/O Р1.21 Линия ввода/вывода общего назначения (GPIO) О PIPESTAT0 Состояние конвейера, бит 0 40 I/O Р1.22 Линия ввода/вывода общего назначения (GPIO) О PIPESTAT1 Состояние конвейера, бит 1
140 Глава 7. Цоколевка и назначение выводов Таблица 7.4. Описание выводов микроконтроллеров LPC2119/29/94 (продолжение) Название Номер вывода Тип Описание Р1.16...Р1.31 36 I/O Р1.23 Линия ввода/вывода общего назначения (GPIO) О PIPESTAT2. Состояние конвейера, бит 2 32 I/O Р1.24 Линия ввода/вывода общего назначения (GPIO) О TRACECLK Тактирование трассировки 28 I/O Р1.25 Линия ввода/вывода общего назначения (GPIO) I EXTIN0 Внешний триггерный вход 24 I/O Р1.26 Линия ввода/вывода общего назначения (GPIO) I/O RTCK Возврат дополнительного сигнала тестирования син- хронизации, который добавляется к JTAG-порту и помогает синхронизации отладчика, когда частота процессора изменяется. Примечание. НИЗКИЙ внешний уровень на выводе Р1.26, в то время как на выводе RESET также при- сутствует НЙЗКИЙ уровень, разрешает работу выво- дов РЕЗ 1:26 в качестве порта отладки после заверше- ния сброса. 64 I/O Р1.27 Линия ввода/вывода общего назначения (GPIO) О TDO Тестирование выходных данных для интерфейса JTAG 60 I/O Р1.28 Линия ввода/вывода общего назначения (GPIO) I TDI Тестирование входных данных для интерфейса JTAG 56 I/O Р1.29. Линия ввода/вывода общего назначения (GPIO) I ТСК Тестирование синхронизации для интерфейса JTAG 52 I/O Р1.30 Линия ввода/вывода общего назначения (GPIO) I TMS Тестирование выбора режима для интерфейса JTAG 20 I/O Р1.31 Линия ввода/вывода общего назначения (GPIO) I TRST Тестирование сброса для интерфейса JTAG TD1 10 О TD1 CAN 1 выход передатчика. Этот вывод допускает по- дачу внешнего напряжения 5 В и имеет встроенный подтягивающий к «плюсу» питания резистор RESET 57 I Вход внешнего сброса: НИЗКИЙ внешний уровень на этом выводе сбрасывает микроконтроллер (при этом состояния портов ввода/вы- вода и периферийных устройствах устанавливаются по умолчанию и процессор начинает выполнение программы с адреса 0). Это ТТЛ- вход с гистерезисом и допустимым входным напряжением 5 В XTAL1 62 I Вход схемы генератора и внутренних цепей генератора синхросигнала XTAL2 61 О Выход усилителя генератора Vss 6, 18, 25, 42, 50 I Заземление: потенциал 0 В VssA 59 I Аналоговое заземление: потенциал 0 В. Несмотря на то что потенциалы входов VSSA и Vss номинально одинаковы, эти входы должны быть изо- лированы друг от друга, чтобы минимизировать шумы и ошибки АЦП VsSA_PLL 58 I PLL аналоговое заземление: потенциал 0 В. Несмотря на то что по- тенциалы входов VSSA PLL и Vss номинально одинаковы, эти входы должны быть изолированы друг от друга, чтобы минимизировать шумы и ошибки АЦП
Глава 7. Цоколевка и назначение выводов 141 Таблица 7.4. Описание выводов микроконтроллеров LPC2119/29/94 (продолжение) Название Номер вывода Тйп Описание V]8 17,49 I 1.8-В электропитание ядра: напряжение питания для внутренних схем микроконтроллера, в т. ч. процессорного ядра V18A 63 I Аналоговое 1.8-В электропитание ядра: напряжение питания для внут- ренних схем микроконтроллера. Несмотря на то что потенциалы вхо- дов V18 и Vj8A номинально одинаковы, эти входы должны быть изоли- рованы друг от друга, чтобы минимизировать шумы и ошибки АЦП V3 23,43,51 I 3.3-В электропитание ввода/вывода: напряжение питания для портов ввода/вывода V3A 7 I Аналоговое 3.3-В электропитание ввода/вывода: несмотря на то что по- тенциалы входов V3 и V3A номинально одинаковы, эти входы должны быть изолированы друг от друга, чтобы минимизировать шумы и ошиб- ки АЦП. Используется также в качестве опорного напряжения для АЦП V3 vss P0.21/PWM5/RD3 /САР1.3 P0.22/TD3,)/CAPO.O/MATO.O P0.23/RD2 P1.19/TRACEPKT3 P0.24/TD2 Vss P2.23/D23 P2.24/D24 P2.25/D25 P2.26/D26/BOOTO Vsa P1.18/TRACEPKT2 P2.27/D27/BOOT1 P2.28/D28 P2.29/D29 P2.30/D30/AIN4 P2.31/D31/AIN5 P0.25/RD1 TD1 P0.27/AIN0/CAP0.1/MATO. 1 P1.17/TRACEPKT1 P0.28/AIN 1/CAP0.2/MAT0.2 Vss P3.29/BLS2/AIN6 P3.28/BLS3/AIN7 P3.27/WE P3.26/CS1 V3 P0.29/AIN2/CAP0.3/MAT0.3 P0.30/AIN3/EINT3/CAP0.0 P1.16/TRACEPKT0 P3.25/CS2 P3.24/CS3 P2.22/D22 C 1 > - > - , ' v " 4' № s б 9 ' 10 11 Ъ J 10 14 w •- 17, ’ & 'Ж I >103 J Ш'] ' 104 1 Wfr 1 WJ Ш 1 too ] MI ' ] [ LW144 3 ] № >31 3fc os '34 ( ( ' t \ M i M м мм M «м*&^11мЬ1ШмимЬ*мм|мшмм1 w B3 я J n J P2.3/D3 Vss P2.2/D2 P2.1/D1 V3 Vss P1.20/TRACESYNC P0.17/CAP1.2/SCK1/MAT1.2 PO. 16/EINT0/MAT0.2/CAP0.2 P0.15/RI1/EINT2 P2.0/D0 P3.30/BLS1 P3.31/BLS0 P1.21/P1PESTAT0 V3 Vss P0.14/DCD 1/EINT1 P1.0/CS0 P1.1/OE P3.0/A0 P3.1/A1 P3.2/A2 P1.22/PIPESTAT1 P0.13/DTR1/MAT1.1/TD4” P0.12/DSR1/MAT1.0/RD41’ PO.11/CTS1/CAP1.1 P1.23/PIPESTAT2 P3.3/A3 P3.4/A4 Vss P0.10/RTS1/CAP1.0 V3 P0.9/RxD1/PWM6/EINT3 P0.8AxD1/PWM4 P3.5/A5 P3.6/A6 ^2S222222s^ 1 > CAN3 и CAN4 доступны только у LPC2294. gilt: * ё 2 222 22 [ е Ф'Ж c Ъ tra s₽ C £ Q Ш £g £ Puc. 7.6. Топологическая схема корпуса LQFP144 микроконтроллеров LPC2292/94
142 Глава 7. Цоколевка и назначение выводов Описание выводов микроконтроллеров LPC2292/94 с указанием их альтер- нативных функций приведено в Табл. 7.5. Топологическая схема корпуса мик- роконтроллеров LPC2292/94 с указанием номеров и функций выводов приведе- на на Рис. 7.6. Таблица 7.5. Описание выводов микроконтроллеров LPC2292/94 Название Номер вывода Ъш Описание Р0.0...Р0.31 42, 49, 50, 58, 59,61, 68, 69, 75, 76, 78, 83...85,92, 99,100,101, 121...123, 4...6, 8,21, 23, 25, 32, 33 I/O Порт 0: порт 0 — 32-битный двунаправленный порт ввода/вывода с индивидуальным заданием направления для каждого бита. Функ- ция каждой линии порта 0 выбирается через блок коммутации вы- водов. Выводы 26 и 31 порта 0 не доступны. Примечание. Все выводы порта 0, исключая те, которые могут ис- пользоваться как входы АЦП (Р0.27, Р0.28, Р0.29 и РО.ЗО), имеют до- пустимое входное напряжение 5 В. Если АЦП не задействован, то выводы, связанные с АЦП, могут также использоваться как цифро- вые выводы I/O с допустимым входным напряжением 5 В. Номи- нальные электрические параметры входов АЦП см. в Приложении 3. 42 I/O РО.О Линия ввода/вывода общего назначения (GPIO) О TxDO Выход передатчика UART0 О PWM1 Выход широтно-импульсного модулятора 1 49 I/O РОЛ Линия ввода/вывода общего назначения (GPIO) I RxDO Вход приемника UART0 О PWM3 Выход широтно-импульсного модулятора 3 I EINT0 Вход внешнего прерывания 0 50 I/O Р0.2 Линия ввода/вывода общего назначения (GPIO) I/O SCL Вход-выход синхронизации 12С. Выход с открытым коллектором (в режиме 12С) I САРО.О Вход захвата TIMER0, канал 0 58 I/O РО.З Линия ввода/вывода общего назначения (GPIO) I/O SDA Вход-выход данных 12С. Выход с открытым коллек- тором (в режиме 12С) О МАТО.О Выход совпадения TIMER0, канал 0 I EINT1 Вход внешнего прерывания 1 59 I/O РОЛ Линия ввода/вывода общего назначения (GPIO) I/O SCK0 Вывод последовательной синхронизации SPIO. Вы- ход синхронизации SPI ведущего или вход ведомого I САР0.1 Вход захвата TIMER0, канал 1 61 I/O Р0.5 Линия ввода/вывода общего назначения (GPIO) I/O MISO0 Вход ведущего-выход ведомого SPIO. Вход данных SPI ведущего или выход данных SPI ведомого О МАТ0.1 Выход совпадения TIMER0, канал 1 68 I/O Р0.6 Линия ввода/вывода общего назначения (GPIO) I/O MOSI0 Выход ведущего-вход ведомого SPIO. Выход данных SPI ведущего или вход данных SPI ведомого I САР0.2 Вход захвата TIMER0, канал 2
Глава 7. Цоколевка и назначение выводов 143 Таблица 7.5. Описание выводов микроконтроллеров LPC2292/94 (продолжение) Название Номер вывода Ъш Описание Р0.0...Р0.31 69 I/O Р0.7 Линия ввода/вывода общего назначения (GPIO) I SSEL0 Выбор ведомого SPIO. Выбирает интерфейс SPI в качестве ведомого О PWM2 Выход широтно-импульсного модулятора 2 I EINT2 Вход внешнего прерывания 2 75 I/O Р0.8 Линия ввода/вывода общего назначения (GPIO) О TxDl Выход передатчика UART1 О PWM4 Выход широтно-импульсного модулятора 4 76 I/O Р0.9 Линия ввода/вывода общего назначения (GPIO) I RxDl Вход приемника UART1 О PWM6 Выход широтно-импульсного модулятора 6 I EINT3 Вход внешнего прерывания 3 78 I/O Р0.10 Линия ввода/вывода общего назначения (GPIO) О RTS1 Выход запроса посылки UART1 I CAP1.0 Вход захвата TIMER1, канал 0 83 I/O Р0.П Линия ввода/вывода общего назначения (GPIO) I CTS1 Вход сброса посылки UART1 I CAPl.l Вход захвата TIMER1, канал 1 84 I/O P0.12 Линия ввода/вывода общего назначения (GPIO) I DSR1 Вход готовности данных UART1 О MAT1.0 Выход совпадения TIMER1, канал 0 I RD4 CAN4 вход приемника (доступен только в LPC2294) 85 I/O P0.13 Линия ввода/вывода общего назначения (GPIO) О DTR1 Выход готовности данных терминала UART1 О MAT1.1 Выход совпадения TIMER1, канал 1 О TD4 CAN4 выход передатчика (доступен только в LPC2194) 92 I/O P0.14 Линия ввода/вывода общего назначения (GPIO) I DCD1 Выход обнаружения несущей данных UART1 I EINT1 Вход внешнего прерывания 1. Примечание. НИЗКИЙ уровень на выводе Р0.14, в то время как на выводе RESET также НИЗКИЙ уровень, приводит к передаче управления встроен- ному загрузчику после завершения сброса. 99 I/O P0.15 Линия ввода/вывода общего назначения (GPIO) I RI1 Вход индикатора вызова UART1 I EINT2 Вход внешнего прерывания 2
144 Глава 7. Цоколевка и назначение выводов Таблица 7,5. Описание выводов микроконтроллеров LPC2292/94 (продолжение) Название Номер вывода Ъш Описание Р0.0...Р0.31 100 I/O Р0.16 Линия ввода/вывода общего назначения (GPIO) I EINT0 Вход внешнего прерывания 0 О МАТ0.2 Выход совпадения TIMER0, канал 2 I САР0.2 Вход захвата TIMER0, канал 2 101 I/O Р0.17 Линия ввода/вывода общего назначения (GPIO) I САР1.2 Вход захвата TIMER1, канал 2 I/O SCK1 Вывод последовательной синхронизации SPI1. Вы- ход синхронизации SPI ведущего или вход ведомого О МАТ1.2 Выход совпадения TIMER1, канал 2 121 I/O Р0.18 Линия ввода/вывода общего назначения (GPIO) I САР1.3 Вход захвата TIMER1, канал 3 I/O MISO1 Вход ведущего-выход ведомого SPI1. Вход данных SPI ведущего или выход данных SPI ведомого О МАТ1.3 Выход совпадения TIMER1, канал 3 122 I/O Р0.19 Линия ввода/вывода общего назначения (GPIO) О МАТ1.2 Выход совпадения TIMER1, канал 2 I/O MOSI1 Выход ведущего-вход ведомого SPIO. Выход данных SPI ведущего или вход данных SPI ведомого I САР1.2 Вход захвата TIMER1, канал 2 123 I/O Р0.20 Линия ввода/вывода общего назначения (GPIO) О МАТ1.3 Выход совпадения TIMER1, канал 3 । I SSEL1 Выбор ведомого SPI1. Выбирает интерфейс SPI в качестве ведомого I EINT3 Вход внешнего прерывания 3 4 I/O Р0.21 Линия ввода/вывода общего назначения (GPIO) О PWM5 Выход широтно-импульсного модулятора 5 I RD3 CAN3 вход приемника (доступен только в LPC2294) I САР1.3 Вход захвата TIMER1, канал 3 5 I/O Р0.22 Линия ввода/вывода общего назначения (GPIO) О TD3 CAN3 выход передатчика (доступен только BLPC2194) I САРО.О Вход захвата TIMER0, канал 0 О МАТО.О Выход совпадения TIMER0, канал 0 6 I/O Р0.23 Линия ввода/вывода общего назначения (GPIO) I RD2 CAN2 вход приемника . 8 I/O Р0.24 Линия ввода/вывода общего назначения (GPIO) О TD2 CAN2 выход передатчика
Глава 7. Цоколевка и назначение выводов 145 Таблица 7.5. Описание выводов микроконтроллеров LPC2292/94 (продолжение) Название Номер вывода Ъш Описание Р0.0...Р0.31 21 I/O Р0.25 Линия ввода/вывода общего назначения (GPIO) I RD1 CAN 1 вход приемника 23 I/O Р0.27 Линия ввода/вывода общего назначения (GPIO) I AIN0 АЦП вход 0. Этот аналоговый ввод всегда подклю- чен к этому выводу I САР0.1 Вход захвата TIMER0, канал 1 О МАТ0.1 Выход совпадения TIMER0, канал 1 25 I/O Р0.28 Линия ввода/вывода общего назначения (GPIO) I AIN1 АЦП вход 1. Этот аналоговый ввод всегда подклю- чен к данному выводу I САР0.2 Вход захвата TIMER0, канал 2 О МАТ0.2 Выход совпадения TIMER0, канал 2 32 I/O Р0.29 Линия ввода/вывода общего назначения (GPIO) I AIN2 АЦП вход 2. Этот аналоговый ввод всегда подклю- чен к данному выводу I САРО.З Вход захвата TIMER0, канал 3 О МАТО.З Выход совпадения TIMER0, канал 3 33 I/O Р0.30 Линия ввода/вывода общего назначения (GPIO) I AIN3 АЦП вход 3. Этот аналоговый ввод всегда подклю- чен к данному выводу I EINT3 Вход внешнего прерывания 3 I САРО.О Вход захвата TIMER0, канал 0 Р1.0...Р1.31 7, 15, 24, 34, 43, 52s 60, 70, 82, 86, 90, 91, 95, 102,113, 126,140,144 I/O Порт 1: порт 1 — 32-битный двунаправленный порт ввода/вывода с индивидуальным заданием направления для каждого бита. Функ- ция каждой линии порта 1 выбирается через блок коммутации вы- водов. Выводы 2... 15 порта 1 недоступны. Примечание. Все выводы порта 1 допускают подачу внешнего на- пряжения 5 В и имеют встроенные подтягивающие к «плюсу» пи- тания резисторы, которые задают ВЫСОКИЙ уровень на выводах, использующихся в качестве входов. 91 I/O Р1.0 Линия ввода/вывода общего назначения (GPIO) О CS0 Сигнал выбора кристалла 0 с активным НИЗКИМ уровнем. (Банк 0 адресов располагается в области 80000000...80FFFFFF) 90 I/O Р1.1 Линия ввода/вывода общего назначения (GPIO) О ОЕ Сигнал разрешения выхода с активным НИЗКИМ уровнем 34 I/O Р1.16 Линия ввода/вывода общего назначения (GPIO) О TRACEPKT0 Трассировка пакетов, бит 0 24 — I/O РЕП Линия ввода/вывода общего назначения (GPIO) О. TRACEPKT1 Трассировка пакетов, бит 1 304
146 Глава 7. Цоколевка и назначение выводов Таблица 7.5. Описание выводов микроконтроллеров LPC2292/94 (продолжение) Название Номер вывода Ъш Описание Р1.0...Р1.31 15 I/O Р1.18 Линия ввода/вывода общего назначения (GPIO) О TRACEPKT2 Трассировка пакетов, бит 2 7 I/O Р1.19 Линия ввода/вывода общего назначения (GPIO) О TRACEPKT3 Трассировка пакетов, бит 3 102 I/O Р1.20 Линия ввода/вывода общего назначения (GPIO) О TRACESYNC Синхронизация трассировки. Примечание. НИЗКИЙ внешний уровень на выводе Р1.20, в то время как на выводе RESET также при- сутствует НИЗКИЙ уровень, разрешает работу вы- водов Р 1.25:16 в качестве линий трассировки паке- тов после завершения сброса. 95 I/O Р1.21 Линия ввода/вывода общего назначения (GPIO) О PIPESTAT0 Состояние конвейера, бит 0 86 I/O Р1.22 Линия ввода/вывода общего назначения (GPIO) О PIPESTAT1 Состояние конвейера, бит 1 82 I/O Р1.23 Линия ввода/вывода общего назначения (GPIO) О PIPESTAT2 Состояние конвейера, бит 2 70 I/O Р1.24 Линия ввода/вывода общего назначения (GPIO) О TRACECLK Тактирование трассировки 60 I/O Р1.25 Линия ввода/вывода общего назначения (GPIO) I EXTIN0 Внешний триггерный вход 52 I/O Р1.26 Линия ввода/вывода общего назначения (GPIO) I/O RTCK Возврат дополнительного сигнала тестирования синхронизации, который добавляется к JTAG-порту и помогает синхронизации отладчика,'когда частота процессора изменяется. Примечание. НИЗКИЙ внешний уровень на выводе Р1.26, в то время как на выводе RESET также при- сутствует НИЗКИЙ уровень, разрешает работу вы- водов Р 1.31:26 в качестве порта отладки после завер- шения сброса. 144 I/O Pl.27 Линия ввода/вывода общего назначения (GPIO) О TDO Тестирование выходных данных для интерфейса JTAG 140 I/O Pl.28 Линия ввода/вывода общего назначения (GPIO) I TDI Тестирование входных данных для интерфейса JTAG 126 I/O Pl.29 Линия ввода/вывода общего назначения (GPIO) I TCK Тестирование синхронизации для интерфейса JTAG 113 I/O Pl.30 Линия ввода/вывода общего назначения (GPIO) I TMS Тестирование выбора режима для интерфейса JTAG 43 I/O Pl.31 Линия ввода/вывода общего назначения (GPIO) I TRST Тестирование сброса для интерфейса JTAG
Глава 7. Цоколевка и назначение выводов 147 Таблица 7.5. Описание выводов микроконтроллеров LPC2292/94 (продолжение) Название Номер вывода Ъш Описание Р2.0...Р2.31 1, 10...13, 16...20, 98, 105, 106, 108, 109, 114...118, 120, 124, 125, 127, 129...134, 136,137 I/O Порт 2: порт 0 — 32-битный двунаправленный порт ввода/вывода с индивидуальным заданием направления для каждого бита. Функ- ция каждой линии порта 0 выбирается через блок коммутации вы- водов. Примечание. Все выводы порта 2, исключая те, которые могут ис- пользоваться как входы АЦП (Р2.30 и Р2.31), допускают подачу внешнего напряжения 5 В. К линии порта 2, сконфигурированной в качестве входа, автоматически подключается встроенный «под- тягивающий» к «плюсу» питания резистор, чтобы установить за- данный по умолчанию ВЫСОКИЙ входной уровень. Если АЦП не задействован, то выводы, связанные с АЦП, могут также использо- ваться как цифровые выводы I/O с допустимым входным напряже- нием 5 В. Номинальные электрические параметры входов АЦП см. в Приложении 3. 98 I/O Р2.0 Линия ввода/вывода общего назначения (GPIO) I/O D0 Линия 0 данных внешней памяти 105 I/O Р2.1 Линия ввода/вывода общего назначения (GPIO) I/O D1 Линия 1 данных внешней памяти 106 I/O Р2.2 Линия ввода/вывода общего назначения (GPIO) I/O D2 Линия 2 данных внешней памяти 108 I/O Р2.3 Линия ввода/вывода общего назначения (GPIO) I/O D3 Линия 3 данных внешней памяти 109 I/O Р2.4 Линия ввода/вывода общего назначения (GPIO) I/O D4 Линия 4 данных внешней памяти 114 I/O Р2.5 Линия ввода/вывода общего назначения (GPIO) I/O D5 Линия 5 данных внешней памяти 115 I/O Р2.6 Линия ввода/вывода общего назначения (GPIO) I/O D6 Линия 6 данных внешней памяти 116 I/O Р2.7 Линия ввода/вывода общего назначения (GPIO) I/O D7 Линия 7 данных внешней памяти 117 I/O Р2.8 Линия ввода/вывода общего назначения (GPIO) I/O D8 Линия 8 данных внешней памяти 118 I/O Р2.9 Линия ввода/вывода общего назначения (GPIO) I/O D9 Линия 9 данных внешней памяти 120 I/O Р2.10 Линия ввода/вывода общего назначения (GPIO) I/O D10 Линия 10 данных внешней памяти 424 I/O P2.ll Линия ввода/вывода общего назначения (GPIO) I/O Dll Линия 11 данных внешней памяти 125 I/O Р2.12 Линия ввода/вывода общего назначения (GPIO) I/O D12 Линия 12 данных внешней памяти
148 Глава 7. Цоколевка и назначение выводов Таблица 7.5. Описание выводов микроконтроллеров LPC2292/94 (продолжение) Название Номер вывода Ът Описание Р2.0...Р2.31 127 I/O Р2.13 Линия ввода/вывода общего назначения (GPIO) I/O D13 Линия 13 данных внешней памяти 129 I/O Р2.14 Линия ввода/вывода общего назначения (GPIO) I/O D14 Линия 14 данных внешней памяти 130 I/O Р2.15 Линия ввода/вывода общего назначения (GPIO) I/O D15 Линия 15 данных внешней памяти 131 I/O Р2.16 Линия ввода/вывода общего назначения (GPIO) I/O D16 Линия 16 данных внешней памяти 132 I/O Р2.17 Линия ввода/вывода общего назначения (GPIO) I/O D17 Линия 17 данных внешней памяти 133 I/O Р2.18 Линия ввода/вывода общего назначения (GPIO) I/O D18 Линия 18 данных внешней памяти 134 I/O Р2.19 Линия ввода/вывода общего назначения (GPIO) I/O D19 Линия 19 данных внешней памяти 136 I/O Р2.20 Линия ввода/вывода общего назначения (GPIO) I/O D20 Линия 20 данных внешней памяти 137 I/O Р2.21 Линия ввода/вывода общего назначения (GPIO) I/O D21 Линия 21 данных внешней памяти 1 I/O Р2.22 Линия ввода/вывода общего назначения (GPIO) I/O D22 Линия 22 данных внешней памяти 10 I/O Р2.23 Линия ввода/вывода общего назначения (GPIO) I/O D23 Линия 23 данных внешней памяти 11 I/O Р2.24 Линия ввода/вывода общего назначения (GPIO) I/O D24 Линия 24 данных внешней памяти 12 I/O Р2.25 Линия ввода/вывода общего назначения (GPIO) I/O D25 Линия 25 данных внешней памяти 13 I/O Р2.26 Линия ввода/вывода общего назначения (GPIO) I/O D26 Линия 26 данных внешней памяти I ВООТО Если на выводе RESET присутствует НИЗКИЙ уро- вень, то через вывод ВООТО (совместно с ВООТ1) производится управление загрузкой и внутренними операциями. Наличие встроенного подтягивающе- го к «плюсу» питания резистора гарантирует ВЫСО- КИЙ уровень на выводе в том случае, когда он не подключен к входному сигналу 16 I/O Р2.27 Линия ввода/вывода общего назначения (GPIO) I/O D27 Линия 27 данных внешней памяти
Глава 7. Цоколевка и назначение выводов 149 Таблица 7.5. Описание выводов микроконтроллеров LPC2292/94 (продолжение) Название Номер вывода Тйп Описание Р2.0...Р2.31 16 I ВООТ1 Если на выводе RESET присутствует НИЗКИЙ уро- вень, то через вывод ВООТ1 (совместно с ВООТО) производится управление загрузкой и внутренними операциями. Наличие встроенного подтягивающе- го к «плюсу» питания резистора гарантирует ВЫСО- КИЙ уровень на выводе в том случае, когда он не подключен к входному сигналу ВООТ1:0 = 00 Выбирается 8-битная память сигналом CS0 для начальной загрузки ВООТ1:0 = 01 Выбирается 16-битная память сигна- лом СS0 для начальной загрузки BOOTH) =10 Выбирается 32-битная память сигна- лом CS0 для начальной загрузки ВООТ1:0=11 Выбирается внутренняя Flash-память 17 I/O Р2.28 Линия ввода/вывода общего назначения (GPIO) I/O D28 Линия 28 данных внешней памяти 18 I/O Р2.29 Линия ввода/вывода общего назначения (GPIO) I/O D29 Линия 29 данных внешней памяти 19 I/O Р2.30 Линия ввода/вывода общего назначения (GPIO) I/O D30 Линия 30 данных внешней памяти I AIN4 АЦП вход 4. Этот аналоговый вход всегда подклю- чен к данному выводу 20 I/O Р2.31 Линия ввода/вывода общего назначения (GPIO) I/O D31 Линия 31 данных внешней памяти I AIN5 АЦП вход 5. Этот аналоговый вход всегда подклю- чен к данному выводу Р3.0...Р3.31 27...30, 35, 36, 40,41, 44...48, 53, 55, 56, 62...66, 71...74, 80, 81, 87...89, 96, 97 I/O Порт 3: порт 0 — 32-битный двунаправленный порт ввода/вывода с индивидуальным заданием направления для каждого бита. Функ- ция каждой линии порта 0 выбирается через блок коммутации вы- водов. Примечание. Все выводы порта 3, исключая те, которые могут ис- пользоваться как входы АЦП (Р3.28 и Р3.29) допускают подачу внешнего напряжения 5 В. К линии порта 3, сконфигурированной в качестве входа, автоматически подключается встроенный подтя- гивающий к «плюсу» питания резистор, чтобы установить задан- ный по умолчанию ВЫСОКИЙ входной уровень. Если АЦП не за- действован, то выводы, связанные с АЦП, могут также использоваться как цифровые выводы I/O с допустимым входным напряжением 5 В. Номинальные электрические параметры входов АЦП см. в Приложении 3. 89 I/O РЗ.О Линия ввода/вывода общего назначения (GPIO) О АО Линия 0 адреса внешней памяти 88 I/O Р3.1 Линия ввода/вывода общего назначения (GPIO) О А1 Линия 1 адреса внешней памяти
150 Глава 7. Цоколевка и назначение выводов Таблица 7.5. Описание выводов микроконтроллеров LPC2292/94 (продолжение) Название Номер вывода Ъш Описание Р3.0...Р3.31 87 I/O Р3.2 Линия ввода/вывода общего назначения (GPIO) О А2 Линия 2 адреса внешней памяти 81 I/O РЗ.З Линия ввода/вывода общего назначения (GPIO) О АЗ Линия 3 адреса внешней памяти 80 I/O Р3.4 Линия ввода/вывода общего назначения (GPIO) О А4 Линия 4 адреса внешней памяти 74 I/O Р3.5 Линия ввода/вывода общего назначения (GPIO) О А5 Линия 5 адреса внешней памяти 73 I/O Р3.6 Линия ввода/вывода общего назначения (GPIO) О А6 Линия 6 адреса внешней памяти 72 I/O Р3.7 Линия ввода/вывода общего назначения (GPIO) О А7 Линия 7 адреса внешней памяти 71 I/O Р3.8 Линия ввода/вывода общего назначения (GPIO) О А8 Линия 8 адреса внешней памяти 66 I/O Р3.8 Линия ввода/вывода общего назначения (GPIO) О А9 Линия 9 адреса внешней памяти 65 I/O Р3.10 Линия ввода/вывода общего назначения (GPIO) О А10 Линия 10 адреса внешней памяти 64 I/O РЗ.П Линия ввода/вывода общего назначения (GPIO) О АН Линия 11 адреса внешней памяти 63 I/O Р3.12 Линия ввода/вывода общего назначения (GPIO) О А12 Линия 12 адреса внешней памяти 62 I/O Р3.13 Линия ввода/вывода общего назначения (GPIO) О А13 Линия 13 адреса внешней памяти 56 I/O Р3.14 Линия ввода/вывода общего назначения (GPIO) О А14 Линия 14 адреса внешней памяти 55 I/O Р3.15 Линия ввода/вывода общего назначения (GPIO) О А15 Линия 15 адреса внешней памяти 53 I/O Р3.16 Линия ввода/вывода общего назначения (GPIO) О А16 Линия 16 адреса внешней памяти 48 I/O РЗ.П Линия ввода/вывода общего назначения (GPIO) О А17 Линия 17 адреса внешней памяти 47 I/O Р3.18 Линия ввода/вывода общего назначения (GPIO) О А18 Линия 18 адреса внешней памяти
Глава 7. Цоколевка и назначение выводов 151 Таблица 7.5. Описание выводов микроконтроллеров LPC2292/94 (продолжение) Название Номер вывода Ъш Описание Р3.0...Р3.31 46 I/O Р3.19 Линия ввода/вывода общего назначения (GPIO) О А19 Линия 19 адреса внешней памяти 45 I/O Р3.20 Линия ввода/вывода общего назначения (GPIO) О А20 Линия 20 адреса внешней памяти 44 I/O Р3.21 Линия ввода/вывода общего назначения (GPIO) О А21 Линия 21 адреса внешней памяти 41 I/O Р3.22 Линия ввода/вывода общего назначения (GPIO) О А22 Линия 22 адреса внешней памяти 40 I/O Р3.23 Линия ввода/вывода общего назначения (GPIO) О А23 Линия 23 адреса внешней памяти О XCLK Выход синхронизации . 36 I/O Р3.24 Линия ввода/вывода общего назначения (GPIO) О CS3 Сигнал выбора кристалла 3 с активным НИЗКИМ уровнем. (Банк 3 адресов располагается в области 8300 0000...83FF FFFF) 35 I/O Р3.25 Линия ввода/вывода общего назначения (GPIO) О CS2 Сигнал выбора кристалла 2 с активным НИЗКИМ уровнем. (Банк 2 адресов располагается в области 8200 0000...82FF FFFF) 30 I/O Р3.26 Линия ввода/вывода общего назначения (GPIO) О CS1 Сигнал выбора кристалла 1 с активным НИЗКИМ уровнем. (Банк 1 адресов располагается в области 8100 0000...81FF FFFF) 29 I/O Р3.27 Линия ввода/вывода общего назначения (GPIO) О WE Сигнал разрешения записи с активным НИЗКИМ уровнем 28 I/O Р3.28 Линия ввода/вывода общего назначения (GPIO) О BLS3 Сигнал выбора байтовой организации с активным НИЗКИМ уровнем (Банк 3) I AIN7 АЦП вход 7. Этот аналоговый вход всегда подклю- чен к данному выводу 27 I/O Р3.29 Линия ввода/вывода общего назначения (GPIO) О BLS2 Сигнал выбора байтовой организации с активным НИЗКИМ уровнем (Банк 2) I AIN6 АЦП вход 6. Этот аналоговый вход всегда подклю- чен к данному выводу 97 I/O РЗ.ЗО Линия ввода/вывода общего назначения (GPIO) О BLS1 Сигнал выбора байтовой организации с активным НИЗКИМ уровнем (Банк 1)
152 Глава 7. Цоколевка и назначение выводов Таблица 7.5. Описание выводов микроконтроллеров LPC2292/94 (продолжение) Название Номер вывода Ъш Описание Р3.0...Р3.31 96 I/O P3.31 Линия ввода/вывода общего назначения (GPIO) 0 BLSO Сигнал выбора байтовой организации с активным НИЗКИМ уровнем (Банк 0) TD1 22 0 TD1 CAN 1 выход передатчика. Этот вывод допускает по- дачу внешнего напряжения 5 В и имеет встроенный подтягивающий к «плюсу» питания резистор RESET 135 I Вход внешнего сброса: НИЗКИЙ внешний уровень на этом выводе сбрасывает микроконтроллер (при этом состояния портов вво- да/вывода и периферийных устройствах устанавливаются по умол- чанию и процессор начинает выполнение программы с адреса 0). Это ТТЛ-вход с гистерезисом и допустимым входным напряжени- ем 5 В XTAL1 142 I Вход схемы генератора и внутренних цепей генератора синхросиг- нала XTAL2 141 0 Выход усилителя генератора Vss 3, 9, 26, 38, 54, 67, 79, 93,103,107, 111,128 I Заземление: потенциал 0 В VsSA 139 I Аналоговое заземление: потенциал 0 В. Несмотря на то что потен- циалы входов VSSA и Vss номинально одинаковы, эти входы долж- ны быть изолированы друг от друга, чтобы минимизировать шумы и ошибки АЦП VsSA_PLL 138 I PLL аналоговое заземление: потенциал 0 В. Несмотря на то что по- тенциалы входов VSSA PLL и Vss номинально одинаковы, эти входы должны быть изолированы друг от друга, чтобы минимизировать шумы и ошибки АЦП V18 37,110 I 1.8-В электропитание ядра: напряжение питания для внутренних схем микроконтроллера, в т. ч. процессорного ядра V18A 143 I Аналоговое 1.8-В электропитание ядра: напряжение питания для внутренних схем микроконтроллера. Несмотря на то что потенци- алы входов V18 и V18A номинально одинаковы, эти входы должны быть изолированы друг от друга, чтобы минимизировать шумы и ошибки АЦП . V3 2,31,39,51, 57, 77, 94, 104, 112,119 I 3.3-В электропитание ввода/вывода: напряжение питания для пор- тов ввода/вывода Vja 14 I Аналоговое 3.3-В электропитание ввода/вывода: несмотря на то что потенциалы входов V3 и V3A номинально одинаковы, эти входы должны быть изолированы друг от друга, чтобы минимизировать шумы и ошибки АЦП. Используется также в качестве опорного на- пряжения для АЦП Описание выводов микроконтроллеров LPC2131/32/34/36/38 с указанием их альтернативных функций приведено в Табл. 7.6. Цоколевка корпуса микро- контроллеров LPC2131/32/34/36/38 с указанием номеров и функций выводов приведена на Рис. 7.7.
Глава 7. Цоколевка и назначение выводов 153 g§ § 8 28 S 8 § 9 2 89 Cl 4B3 C 2; z • ' " ' • ' 47 3 C3 ' f ' — 4fi3 C 4 ' • • ' ' -s , 48 1 C3 ' '' '' ' , , 4 441 C 6 /' ' , 43 J LPC2131/32/34/36/3B / P0.21/PWM5/AD1.б”/САР1.3 P0.22/AD1.7”/САР0.0/МАТ0.0 RTCX1 Р1.19ДПАСЕРКТЗ RTCX2 Vss Vdda P1.18/TRACEPKT2 P0.25/AD0.4/Aout2’ P0.26/AD0.5 P0.27/AD0.0/CAP0.1 /MATO. 1 P1.17/TRACEPKT1 P0.28/AD0.1 /САР0.2/МАТ0.2 P0.29/AD0.2/CAP0.3/MAT0.3 P0.30/AD0.3/EINT3/CAP0.0 P1.16/TRACEPKT0 CH - ' ' ' \'381 £12 ' ' ' - -ЛЧ < ' . 371 £13 *" ; Sfi 3 C 14 ' - •: -JS1 CIS ' , ''343 CW ' ' ' ? <$3 P1.20/TRACESYNC P0.17/CAP1.2/SCK1/MAT1.2 РО. 16/EINT0/MAT0.2/CAP0.2 P0.15/RI11’/EINT2/AD1.51> P1.21/PIPESTAT0 Vdd Vss P0.14/DCD1 /EINT1/SDA1 P1.22/PIPESTAT1 РО. 13/DTR1 ”/MAT1.1/AD1.4” P0.12/DSR1 ’’/МАП.0/AD1.31’ PO.11/CTS1n/CAP1.1/SCL1 P1.23/PIPESTAT2 P0.10/RTS1/CAP1.0/AD1.21’ P0.9/RxD1/PWM6/EINT3 P0.8/TxD1/PWM4/AD1.1n 1’Только у LPC2134/36/38. 2)Только у LPC2132/34/36/38. Puc. 7.7. Топологическая схема корпуса LQFP64 микроконтроллеров LPC2131/32/34/36/38 Таблица 7.6. Описание выводов микроконтроллеров LPC2131/32/34/36/38 Название Номер вывода Ъш Описание Р0.0...Р0.31 1,2, 9...11, 13...15, 17, 19, 21,22, 26, 27, 29...31, 33...35, 37...39, 41, 45...47, 53...55, ,' 58 I/O Порт 0: порт 0 — 32-битный двунаправленный порт ввода/вывода с индивидуальным заданием направления для каждого бита. Функ- ция каждой линии порта 0 выбирается через блок коммутации выво- дов. Линия Р0.31 является только выходом. Вывод Р0.24 недоступен. Примечание. Все выводы порта 0, исключая те, которые могут ис- пользоваться как входы АЦП, имеют допустимое входное напряже- ние 5 В. Если АЦП не задействован, то выводы, связанные с АЦП, могут также использоваться как цифровые выводы I/O с допустимым входным напряжением 5 В. Номинальные электрические параметры входов АЦП см. в Приложении 3. 19 I/O РО.О Линия ввода/вывода общего назначения (GPIO) 0 TxDO Выход передатчика UART0 0 PWM1 Выход широтно-импульсного модулятора 1 21 I/O РОЛ Линия ввода/вывода общего назначения (GPIO) I RxDO Вход приемника UART0 0 PWM3 Выход широтно-импульсного модулятора 3 I EINT0 Вход внешнего прерывания 0
154 Глава 7. Цоколевка и назначение выводов Таблица 7.6. Описание выводов микроконтроллеров LPC2131/32/34/36/38 (продолжение) Название Номер вывода Тйп Описание Р0.0...Р0.31 22 I/O Р0.2 Линия ввода/вывода общего назначения (GPIO) I/O SCL0 Вход-выход синхронизации 12С. Выход с открытым коллектором (в режиме 12С) I САРО.О Вход захвата TIMER0, канал 0 26 I/O РО.З Линия ввода/вывода общего назначения (GPIO) I/O SDA0 Вход-выход данных 12С. Выход с открытым коллекто- ром (в режиме 12С) О МАТО.О Выход совпадения TIMER0, канал 0 I EINT1 Вход внешнего прерывания 1 27 I/O Р0.4 Линия ввода/вывода общего назначения (GPIO) I/O SCK0 Вывод последовательной синхронизации SPIO. Выход синхронизации SPI ведущего или вход ведомого I САР0.1 Вход захвата TIMER0, канал 1 I AD0.6 Вход 6 АЦПО. Этот аналоговый вход всегда подключен к данному выводу 29 I/O Р0.5 Линия ввода/вывода общего назначения (GPIO) I/O MISOO Вход ведущего-выход ведомого SPIO. Вход данных SPI ведущего или выход данных SPI ведомого О МАТ0.1 Выход совпадения TIMER0, канал 1 I AD0.7 Вход 7 АЦПО. Этот аналоговый вход всегда подключен к данному выводу 30 I/O РО.б Линия ввода/вывода общего назначения (GPIO) I/O MOSIO Выход ведущего-вход ведомого SPIO. Выход данных SPI ведущего или вход данных SPI ведомого I САР0.2 Вход захвата TIMER0, канал 2 I AD1.0 Вход 0 АЦП1. Этот аналоговый вход всегда подключен к данному выводу (только у LPC2134/36/38) 31 I/O Р0.7 Линия ввода/вывода общего назначения (GPIO) I SSEL0 Выбор ведомого SPIO. Выбирает интерфейс SPI в качес- тве ведомого О PWM2 Выход широтно-импульсного модулятора 2 I EINT2 Вход внешнего прерывания 2 33 I/O Р0.8 Линия ввода/вывода общего назначения (GPIO) О TxDl Выход передатчика UART1 О PWM4. Выход широтно-импульсного модулятора 4 I AD1.1 Вход 1 АЦП1. Этот аналоговый вход всегда подключен к данному выводу (только у LPC2134/36/38) 34 I/O Р0.9 Линия ввода/вывода общего назначения (GPIO) I RxDl Вход приемника UART1 О PWM6 Выход широтно-импульсного модулятора 6 I EINT3 Вход внешнего прерывания 3
Глава 7. Цоколевка и назначение выводов 155 Таблица 7.6. Описание выводов микроконтроллеров LPC2131/32/34/36/38 (продолжение) Название Номер вывода Тйп Описание Р0.0...Р0.31 35 I/O Р0.10 Линия ввода/вывода общего назначения (GPIO) О RTS1 Выход запроса посылки UART1 I САР1.0 Вход захвата TIMER1, канал 0 I AD1.2 Вход 2 АЦП1. Этот аналоговый вход всегда подключен к данному выводу (только у LPC2134/36/38) 37 I/O Р0.11 Линия ввода/вывода общего назначения (GPIO) I CTS1 Вход сброса посылки UART1 I САРЫ Вход захвата TIMER1, канал 1 I/O SCL1 Вход-выход синхронизации 12С. Выход с открытым коллектором (в режиме гС) 38 I/O Р0.12 Линия ввода/вывода общего назначения (GPIO) I DSR1 Вход готовности данных UART1 О МАТ1.0 Выход совпадения TIMER1, канал 0 I AD1.3 Вход 3 АЦП1. Этот аналоговый вход всегда подключен к данному выводу (только у LPC2134/36/38) 39 I/O РОЛЗ Линия ввода/вывода общего назначения (GPIO) О DTR1 Выход готовности данных терминала UART1 О МАТЫ Выход совпадения TIMER1, канал 1 I AD1.4 Вход 4 АЦП1. Этот аналоговый вход всегда подключен к данному выводу (только у LPC2134/36/38) 41 I/O РОЛ 4 Линия ввода/вывода общего назначения (GPIO) I DCD1 Вход обнаружения несущей данных UART1 I EINT1 Вход внешнего прерывания 1 I/O SDA1 Вход-выход данных 12С. Выход с открытым коллекто- ром (в режиме 12С). Примечание. НИЗКИЙ уровень на выводе Р0.14, в то время как на выводе RESET также НИЗКИЙ уровень, приводит к передаче управления встроенному загрузчи- ку после завершения сброса. 45 I/O Р0Л5 Линия ввода/вывода общего назначения (GPIO) I RI1 Вход индикатора вызова UART1 I EINT2 Вход внешнего прерывания 2 I AD1.5 Вход 5 АЦП1. Этот аналоговый вход всегда подключен к данному выводу (только у LPC2134/36/38) 46 I/O РОЛ 6 Линия ввода/вывода общего назначения (GPIO) I EINT0 Вход внешнего прерывания 0 О МАТ0.2 Выход совпадения TIMER0, канал 2 I CAPO.2 Вход захвата TIMER0, канал 2 47 I/O Р0Л7 Линия ввода/вывода общего назначения (GPIO) I САР1.2 Вход захвата TIMER1, канал 2 I/O SCK1 Вывод последовательной синхронизации SPI1. Выход синхронизации SPI ведущего или вход ведомого О МАТ1.2 Выход совпадения TIMER1, канал 2
156 Глава 7. Цоколевка и назначение выводов Таблица 7.6. Описание выводов микроконтроллеров LPC2131/32/34/36/38 (продолжение) Название Номер вывода Тйп Описание Р0.0...Р0.31 53 I/O Р0.18 Линия ввода/вывода общего назначения (GPIO) I САР1.3 Вход захвата TIMER1, канал 3 I/O MISO1 Вход ведущего-выход ведомого SPI1. Вход данных SPI ведущего или выход данных SPI ведомого О МАТ1.3 Выход совпадения TIMER1, канал 3 54 I/O Р0.19 Линия ввода/вывода общего назначения (GPIO) О МАТ1.2 Выход совпадения TIMER1, канал 2 I/O MOSI1 Выход ведущего-вход ведомого SPIO. Выход данных SPI ведущего или вход данных SPI ведомого I САР1.2 Вход захвата TIMER1, канал 2 55 I/O Р0.20 Линия ввода/вывода общего назначения (GPIO) О МАТ1.3 Выход совпадения TIMER1, канал 3 I SSEL1 Выбор ведомого SPI1. Выбирает интерфейс SPI в качес- тве ведомого I EINT3 Вход внешнего прерывания 3 1 I/O Р0.21 Линия ввода/вывода общего назначения (GPIO) О PWM5 Выход широтно-импульсного модулятора 5 I AD1.6 Вход 6 АЦП1. Этот аналоговый вход всегда подключен к этому выводу (только у LPC2134/36/38) I САР1.3 Вход захвата TIMER 1, канал 3 2 I/O Р0.22 Линия ввода/вывода общего назначения (GPIO) I AD1.7 Вход 7 АЦШ. Этот аналоговый вход всегда подключен к данному выводу (только у LPC2134/36/38) I САРО.О Вход захвата TIMER0, канал 0 О МАТО.О Выход совпадения TIMER0, канал 0 58 I/O Р0.23 Линия ввода/вывода общего назначения (GPIO) 9 I/O Р0.25 Линия ввода/вывода общего назначения (GPIO) I AD0.4 Вход 4 АЦПО. Этот аналоговый вход всегда подключен к данному выводу О Aout Выход ЦАП (только у LPC2132/34/36/38) 10 I/O Р0.26 Линия ввода/вывода общего назначения (GPIO) I AD0.5 Вход 5 АЦПО. Этот аналоговый вход всегда подключен к данному выводу 11 I/O Р0.27 Линия ввода/вывода общего назначения (GPIO) I AD0.0 Вход 0 АЦПО. Этот аналоговый вход всегда подключен к данному выводу I CAPO Л Вход захвата TIMER0, канал 1 О MATO Л Выход совпадения TIMER0, канал 1
Глава 7. Цоколевка и назначение выводов 157 Таблица 7.6. Описание выводов микроконтроллеров LPC2131/32/34/36/38 (продолжение) Название Номер вывода Ъш Описание Р0.0...Р0.31 13 I/O Р0.28 Линия ввода/вывода общего назначения (GPIO) I AD0.1 Вход 1АЦПО. Этот аналоговый вход всегда подключен к данному выводу I САР0.2 Вход захвата TIMER0, канал 2 О МАТ0.2 Выход совпадения TIMER0, канал 2 14 I/O Р0.29 Линия ввода/вывода общего назначения (GPIO) I AD0.2 Вход 2 АЦПО. Этот аналоговый вход всегда подключен к данному выводу I САРО.З Вход захвата TIMER0, канал 3 О МАТО.З Выход совпадения TIMER0, канал 3 15 I/O Р0.30 Линия ввода/вывода общего назначения (GPIO) I AD0.3 Вход 3 АЦПО. Этот аналоговый вход всегда подключен к данному выводу I EINT3 Вход внешнего прерывания 3 I САРО.О Вход захвата TIMER0, канал 0 17 О Р0.31 Линия только вывода общего назначения (GPIO) Р1.16...Р1.31 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64 I/O Порт 1: порт 1 — 32-битный двунаправленный порт ввода/вывода с индивидуальным заданием направления для каждого бита. Функ- ция каждой линии порта 1 выбирается через блок коммутации выво- дов. Только выводы 16...31 порта 1 доступны. Примечание. Все выводы порта 1 допускают подачу внешнего напря- жения 5 В и имеют встроенные подтягивающие к «плюсу» питания резисторы, которые задают ВЫСОКИЙ уровень на выводе, когда этот вывод используется как вход. 16 I/O Р1.16 Линия ввода/вывода общего назначения (GPIO) О TRACEPKT0 Трассировка пакетов, бит 0 12 I/O Р1.17 Линия ввода/выВода общего назначения (GPIO) О TRACEPKT1 Трассировка пакетов, бит 1 8 I/O Р1.18 Линия ввода/вывода общего назначения (GPIO) О TRACEPKT2 Трассировка пакетов, бит 2 4 I/O Р1.19 Линия ввода/вывода общего назначения (GPIO) О TRACEPKT3 Трассировка пакетов, бит 3 48 I/O Р1.20 Линия ввода/вывода общего назначения (GPIO) О TRACESYNC Синхронизация трассировки. Примечание. НИЗКИЙ внешний уровень на выводе Р1.20, в то время как на выводе RESET также присутс- твует НИЗКИЙ уровень, разрешает работу выводов Р1.25:16 в качестве линий трассировки пакетов после завершения сброса. 44 I/O Р1.21 Линия ввода/вывода общего назначения (GPIO) О PIPESTAT0 Состояние конвейера, бит 0
158 Глава 7. Цоколевка и назначение выводов Таблица 7.6. Описание выводов микроконтроллеров LPC2131/32/34/36/38 (продолжение) Название Номер вывода Ъш Описание Р1.16...Р1.31 40 I/O Р1.22 Линия ввода/вывода общего назначения (GPIO) О PIPESTAT1 Состояние конвейера, бит 1 36 I/O Р1.23 Линия ввода/вывода общего назначения (GPIO) О PIPESTAT2 Состояние конвейера, бит 2 32 I/O Р1.24 Линия ввода/вывода общего назначения (GPIO) О TRACECLK Тактирование трассировки 28 I/O Р1.25 Линия ввода/вывода общего назначения (GPIO) I EXTIN0 Внешний триггерный вход 24 I/O Р1.26 Линия ввода/вывода общего назначения (GPIO) I/O RTCK Возврат дополнительного сигнала тестирования синх- ронизации, который добавляется к JTAG-порту и помо- гает синхронизации отладчика, когда частота процессо- ра изменяется. Двунаправленная линия ввода/вывода с встроенным подтягивающим к «плюсу» питания резис- тором. Примечание. НИЗКИЙ внешний уровень на выводе Р1.26, в то время как на выводе RESET также присутс- твует НИЗКИЙ уровень, разрешает работу выводов Р 1.31:26 в качестве порта отладки после завершения сброса. 64 I/O Р1.27 Линия ввода/вывода общего назначения (GPIO) О ТОО Тестирование выходных данных для интерфейса JTAG 60 I/O Р1.28 Линия ввода/вывода общего назначения (GPIO) I TDI Тестирование входных данных для интерфейса JTAG 56 I/O Р1.29 Линия ввода/вывода общего назначения (GPIO) I тек Тестирование синхронизации для интерфейса JTAG 52 I/O Р1.30 Линия ввода/вывода общего назначения (GPIO) I TMS Тестирование выбора режима для интерфейса JTAG 20 I/O Р1.31 Линия ввода/вывода общего назначения (GPIO) I TRST Тестирование сброса для интерфейса JTAG RESET 57 I Вход внешнего сброса: НИЗКИЙ внешний уровень на этом выводе сбрасывает микроконтроллер (при этом состояния портов ввода/вы- вода и периферийных устройствах устанавливаются по умолчанию и процессор начинает выполнение программы с адреса 0). Это ТТЛ- вход с гистерезисом, Это ТТЛ-вход с гистерезисом и допустимым входным напряжением 5 В XTAL1 62 I Вход схемы генератора и внутренних цепей генератора синхросигнала XTAL2 61 О Выход усилителя генератора RTCX1 3 I Вход подключения кварцевого резонатора к генератору RTC RTCX2 5 О Выход подключения кварцевого резонатора к генератору RTC Vss 6,18, 25, 42, 50 I Заземление: потенциал 0 В
Глава 7. Цоколевка и назначение выводов 159 Таблица 7.6. Описание выводов микроконтроллеров LPC2131/32/34/36/38 (продолжение) Название Номер вывода Thn Описание Vssa 59 I Аналоговое заземление: потенциал 0 В. Несмотря на то что потенциа- лы входов VSSA и Vss номинально одинаковы, эти входы должны быть изолированы друг от друга, чтобы минимизировать шумы и ошибки АЦП vdd 23,43,51 I 3.3-В электропитание ввода/вывода: напряжение питания для портов ввода/вывода Vdda 7 I Аналоговое 3.3-В электропитание ввода/вывода: несмотря на то что потенциалы входов VDD и VDDA номинально одинаковы, эти входы должны быть изолированы друг от друга, чтобы минимизировать шу- мы и ошибки АЦП. Используется также в качестве питающего на- пряжения для ФАПЧ Vref 63 I Опорное напряжение ЦАП и АЦП: несмотря на то что потенциалы входов VDD и VREF номинально одинаковы, эти входы должны быть изолированы друг от друга, чтобы минимизировать шумы и ошибки ЦАП и АЦП. Используется также в качестве опорного напряжения для ЦАП и АЦП Vbat 49 I 3.3-В электропитание модуля RTC: напряжение питания для модуля RTC Описание выводов микроконтроллеров LPC2141/42/44/46/48 с указанием их альтернативных функций приведено в Табл. 7.7. Цоколевка корпуса микро- контроллеров LPC2141/42/44/46/48 с указанием номеров и функций выводов приведена на Рис. 7.8. Р0.21/PWM5/AD1.6’>/САР1.3 P0.22/AD1 J’VCAPO.O/MATO.O RTXC1 P1.19/TRACEPKT3 RTXC2 VSS VDDA P1.18/TRACEPKT2 P0.25/AD0.4/Aout2) D+ D- P1.17/TRACEPKT1 P0.28/AD0.1/CAP0.2/MAT0.2 P0.29/AD0.2/CAP0.3/MAT0.3 P0.30/AD0.3/EINT3/CAP0.0 P1.16/TRACEPKT0 СТ ; ' ' / < . ' . ' t Л - '48 3 СЯ s ; : . ' 4П с| ,, - , \ ' ' ' ' ' . '463 С 4' ' -46 3 св ;>з св ' , -43 з ‘It/ww. ’ с*' . ' Л Л^з с» — ЛОЖ < .яр с fl с« Л ей / СИ с» ей - - ' < \ : P1.20ARACESYNC P0.17/CAP1.2/SCK1/MAT1.2 P0.16/EINT0/MAT0.2/CAP0.2 P0.15/Rir,/EINT2/AD1.51) P1.21/PIPESTAT0 VDD VSS P0.14/DCD1’>/EINT1/SDA1 P1.22/PIPESTAT1 P0.13/DTR11)/MAT1.1/AD1.4’> P0.12/DSR11)/MAT1.0/AD1.3’> P0.11/CTSr>/CAP1.1/SCL1 P1.23/PIPESTAT2 P0.10/RTS11)/CAP1.0/AD1.21> P0.9/RxD1/PWM6/EINT3 P0.8/TXD1/PWM4/AD1.1” ” Только у LPC2144/46/48. 2) Только у LPC2142/44/46/48. Puc. 7.8. Топологическая схема корпуса LQFP64 микроконтроллеров LPC2141/42/44/46/48
160 Глава 7. Цоколевка и назначение выводов Таблица 7.7. Описание выводов микроконтроллеров LPC2141/42/44/46/48 Название Номер вывода Ъш Описание Р0.0...Р0.31 1,2,9, 13...15,17, 19,21,22, 26, 27, 29...31, 33...35, 37...39,41, 45...47, 53...55, 58 I/O Порт 0: порт 0 — 32-битный двунаправленный порт ввода/вывода с ин- дивидуальным заданием направления для каждого бита. Функция каж- дой линии порта 0 выбирается через блок коммутации выводов. Линия Р0.31 является только выходом. Выводы Р0.24, Р0.26, Р0.27 недоступны 19” I/O РО.О Линия ввода/вывода общего назначения (GPIO) О TxDO Выход передатчика UART0 О PWM1 Выход широтно-импульсного модулятора 1 212) I/O РОЛ Линия ввода/вывода общего назначения (GPIO) I RxDO Вход приемника UART0 О PWM3 Выход широтно-импульсного модулятора 3 I EINT0 Вход внешнего прерывания 0 223) I/O Р0.2 Линия ввода/вывода общего назначения (GPIO) I/O SCL0 Вход-выход синхронизации 12С. Выход с открытым коллектором (в режиме 12С) I САРО.О Вход захвата TIMER0, канал 0 263> I/O РО.З Линия ввода/вывода общего назначения (GPIO) I/O SDA0 Вход-выход данных 12С. Выход с открытым коллекто- ром (в режиме 12С) О МАТО.О Выход совпадения TIMER0, канал 0 I EINT1 Вход внешнего прерывания 1 27” I/O РОЛ Линия ввода/вывода общего назначения (GPIO) I/O SCK0 Вывод последовательной синхронизации SPIO. Выход синхронизации SPI ведущего или вход ведомого I САР0.1 Вход захвата TIMER0, канал 1 I AD0.6 Вход 6 АЦПО. Этот аналоговый вход всегда подключен к данному выводу 29” I/O Р0.5 Линия ввода/вывода общего назначения (GPIO) I/O MISOO Вход ведущего-выход ведомого SPIO. Вход данных SPI ведущего или выход данных SPI ведомого О МАТ0.1 Выход совпадения TIMER0, канал 1 I AD0.7 Вход 7 АЦПО. Этот аналоговый вход всегда подключен к данному выводу 30” I/O Р0.6 Линия ввода/вывода общего назначения (GPIO) I/O MQSI0 Выход ведущего-вход ведомого SPIO. Выход данных SPI ведущего или вход данных SPI ведомого I САР0.2 Вход захвата TIMER0, канал 2 I AD1.0 Вход 0 АЦП 1. Этот аналоговый вход всегда подключен к данному выводу (только у LPC2144/46/48) 312) I/O Р0.7 Линия ввода/вывода общего назначения (GPIO) I SSEL0 Выбор ведомого SPIO. Выбирает интерфейс SPI в качестве ведомого О PWM2 Выход широтно-импульсного модулятора 2 I EINT2 Вход внешнего прерывания 2
Глава 7. Цоколевка и назначение выводов 161 Таблица 7.7. Описание выводов микроконтроллеров LPC2141/42/44/46/48 (продолжение) Название Номер вывода Тйп Описание Р0.0...Р0.31 334> I/O Р0.8 Линия ввода/вывода общего назначения (GPIO) о TxDl Выход передатчика UART1 о PWM4 Выход широтно-импульсного модулятора 4 I AD1.1 Вход 1АЦП1. Этот аналоговый вход всегда подключен к данному выводу (только у LPC2144/46/48) 342* I/O Р0.9 Линия ввода/вывода общего назначения (GPIO) I RxDl Вход приемника UART1 О PWM6 Выход широтно-импульсного модулятора 6 I EINT3 Вход внешнего прерывания 3 354) I/O Р0.10 Линия ввода/вывода общего назначения (GPIO) о RTS1 Выход запроса посылки UART1 I CAP1.0 Вход захвата TIMER1, канал 0 I AD 1.2 Вход 2 АЦП1. Этот аналоговый вход всегда подключен к данному выводу (только у LPC2144/46/48) З73) I/O P0.11 Линия ввода/вывода общего назначения (GPIO) I CTS1 Вход сброса посылки UART1 I CAP1.1 Вход захвата TIMER1, канал 1 I/O SCL1 Вход-выход синхронизации 12С. Выход с открытым коллектором (в режиме 12С) 384) I/O P0.12 Линия ввода/вывода общего назначения (GPIO) I DSR1 Вход готовности данных UART1 О MAT1.0 Выход совпадения TIMER1, канал 0 I AD1.3 Вход 3 АЦП1. Этот аналоговый вход всегда подключен к данному выводу (только у LPC2144/46/48) 394’ I/O P0.13 Линия ввода/вывода общего назначения (GPIO) о DTR1 Выход готовности данных терминала UART1 (только у LPC2144/46/48) О MAT1.1 Выход совпадения TIMER1, канал 1 I AD1.4 Вход 4 АЦП1. Этот аналоговый вход всегда подключен к данному выводу (только у LPC2144/46/48) 413) I/O P0.14 Линия ввода/вывода общего назначения (GPIO) I DCD1 Вход обнаружения несущей данных UART1 (только у LPC2144/46/48) I EINT1 Вход внешнего прерывания 1 I/O SDA1 Вход-выход данных 12С. Выход с открытым коллекто- ром (в режиме 12С) Примечание. НИЗКИЙ уровень на выводе Р0.14, в то время как на выводе RESET также НИЗКИЙ уровень, приводит к передаче управления встроенному загруз- чику после завершения сброса. 304
162 Глава 7. Цоколевка и назначение выводов Таблица 7.7. Описание выводов микроконтроллеров LPC2141/42/44/46/48 (продолжение) Название Номер вывода Тйп Описание Р0.0...Р0.31 45“) I/O Р0.15 Линия ввода/вывода общего назначения (GPIO) I RI1 Вход индикатора вызова UART1 (только у LPC2144/46/48) I EINT2 Вход внешнего прерывания 2 I AD1.5 Вход 5 АЦП1. Этот аналоговый вход всегда подключен к данному выводу (только у LPC2144/46/48) 46” I/O Р0.16 Линия ввода/вывода общего назначения (GPIO) I EINT0 Вход внешнего прерывания 0 О МАТ0.2 Выход совпадения TIMER0, канал 2 I САР0.2 Вход захвата TIMER0, канал 2 47” I/O Р0.17 Линия ввода/вывода общего назначения (GPIO) I САР1.2 Вход захвата TIMER 1, канал 2 I/O SCK1 Вывод последовательной синхронизации SPI1. Выход синхронизации SPI ведущего или вход ведомого О МАТ1.2 Выход совпадения TIMER1, канал 2 53” I/O Р0.18 Линия ввода/вывода общего назначения (GPIO) I САР1.3 Вход захвата TIMER1, канал 3 I/O MISO1 Вход ведущего-выход ведомого SPI1. Вход данных SPI ведущего или выход данных SPI ведомого О МАТ1.3 Выход совпадения TIMER1, канал 3 54” I/O Р0.19 Линия ввода/вывода общего назначения (GPIO) о МАТ1.2 Выход совпадения TIMER1, канал 2 I/O MOSI1 Выход ведущего-вход ведомого SPIO. Выход данных SPI ведущего или вход данных SPI ведомого I САР1.2 Вход захвата TIMER1, канал 2 55” I/O Р0.20 Линия ввода/вывода общего назначения (GPIO) О МАТ1.3 Выход совпадения TIMER1, канал 3 I SSEL1 Выбор ведомого SPI1. Выбирает интерфейс SPI в качестве ведомого I EINT3 Вход внешнего прерывания 3 14> I/O Р0.21 Линия ввода/вывода общего назначения (GPIO) о PWM5 Выход широтно-импульсного модулятора 5 I AD1.6 Вход 6 АЦП1. Этот аналоговый вход всегда подключен к данному выводу (только у LPC2144/46/48) I САР1.3 Вход захвата TIMER1, канал 3 24> I/O Р0.22 Линия ввода/вывода общего назначения (GPIO) I AD1.7 Вход 7 АЦП1. Этот аналоговый вход всегда подключен к данному выводу (только у LPC2144/46/48) I САРО.О Вход захвата TIMER0, канал 0 о МАТО.О Выход совпадения TIMER0, канал 0
Глава 7. Цоколевка и назначение выводов 163 Таблица 7.7. Описание выводов микроконтроллеров LPC2141/42/44/46/48 (продолжение) Название Номер вывода Тйп Описание Р0.0...Р0.31 58*> I/O Р0.23 Линия ввода/вывода общего назначения (GPIO) I Vbus Индикация наличия напряжения питания USB 9» I/O Р0.25 Линия ввода/вывода общего назначения (GPIO) I ADO.4 Вход 4 АЦПО. Этот аналоговый вход всегда подключен к данному выводу О Аоит Выход ЦАП (только у LPC2142/44/46/48) 134) I/O Р0.28 Линия ввода/вывода общего назначения (GPIO) I AD0.1 Вход 1 АЦПО. Этот аналоговый вход всегда подключен к данному выводу I CAP0.2 Вход захвата TIMER0, канал 2 О MAT0.2 Выход совпадения TIMER0, канал 2 144) I/O P0.29 Линия ввода/вывода общего назначения (GPIO) I AD0.2 Вход 2 АЦПО. Этот аналоговый вход всегда подключен к данному выводу I CAP0.3 Вход захвата TIMER0, канал 3 о MAT0.3 Выход совпадения TIMER0, канал 3 15“) I/O Р0.30 Линия ввода/вывода общего назначения (GPIO) I AD0.3 Вход 3 АЦПО. Этот аналоговый вход всегда подключен к данному выводу I EINT3 Вход внешнего прерывания 3 I САРО.О Вход захвата TIMER0, канал 0 17б) о Р0.31 Линия только вывода общего назначения (GPIO) О UP_LED Светодиодный индикатор корректной связичерез USB. На этом выводе присутствует НИЗКИЙ уровень, когда микроконтроллер сконфигурирован (конечные точки разрешены), и ВЫСОКИЙ уровень, когда мик- роконтроллер не сконфигурирован или находится в режиме глобальной остановки О CONNECT Сигнал, который используется для программного уп- равления подключением внешних резисторов 1.5 кОм (активный уровень НИЗКИЙ). Примечание. На этот вывод не следует подавать вне- шний НИЗКИЙ уровень, когда на линия RESET при- сутствует НИЗКИЙ уровень, иначе порт JTAG будет заблокирован. Р1.16...Р1.31 4, 8, 12, 16,20,24, 28,’32, 36, 40,44,487 52,56,60, 64 I/O Порт 1: порт 1 — 32-битный двунаправленный порт ввода/вывода с индивидуальным заданием направления для каждого бита. Функция каждой линии порта 1 выбирается через блок коммутации выводов. Только выводы 16...31 порта 1 доступны. Примечание. Все выводы порта 1 допускают подачу внешнего напря- жения 5 В и имеют встроенные подтягивающие к «плюсу» питания резисторы, которые задают ВЫСОКИЙ уровень на выводе, когда этот вывод используется как вход. 166) I/O Р1.16 Линия ввода/вывода общего назначения (GPIO) о TRACEPKT0 Трассировка пакетов, бит 0
164 Глава 7. Цоколевка и назначение выводов Таблица 7.7. Описание выводов микроконтроллеров LPC2141/42/44/46/48 (продолжение) Название Номер вывода Ъш Описание Р1.16...Р1.31 126) I/O Р1.17 Линия ввода/вывода общего назначения (GPIO) о TRACEPKT1 Трассировка пакетов, бит 1 8б) I/O Р1.18 Линия ввода/вывода общего назначения (GPIO) О TRACEPKT2 Трассировка пакетов, бит 2 4б) I/O Р1.19 Линия ввода/вывода общего назначения (GPIO) О TRACEPKT3 Трассировка пакетов, бит 3 486) I/O Р1.20 Линия ввода/вывода общего назначения (GPIO) о TRACESYNC Синхронизация трассировки. Примечание. НИЗКИЙ внешний уровень на выводе Р1.20, в то время как на выводе RESET также присутс- твует НИЗКИЙ уровень, разрешает работу выводов Р 1.25:16 в качестве линий трассировки пакетов после завершения сброса. 446) I/O Р1.21 Линия ввода/вывода общего назначения (GPIO) о PIPESTATO Состояние конвейера, бит 0 406) I/O Р1.22 Линия ввода/вывода общего назначения (GPIO) О PIPESTAT1 Состояние конвейера, бит 1 36б) I/O Р1.23 Линия ввода/вывода общего назначения (GPIO) О PIPESTAT2 Состояние конвейера, бит 2 326) I/O Р1.24 Линия ввода/вывода общего назначения (GPIO) о TRACECLK Тактирование трассировки 286) I/O Р1.25 Линия ввода/вывода общего назначения (GPIO) I EXTIN0 Внешний триггерный вход 24б) I/O Р1.26 Линия ввода/вывода общего назначения (GPIO) I/O RTCK Возврат дополнительного сигнала тестирования синх- ронизации, который добавляется к JTAG-порту и по- могает синхронизации отладчика, когда частота про- цессора изменяется. Примечание. НИЗКИЙ внешний уровень на выводе Р1.26, в то время как на выводе RESET также присутству- ет НИЗКИИ уровень, разрешает работу выводов Р1.31:26 в качестве порта отладки после завершения сброса. 646) I/O Р1.27 Линия ввода/вывода общего назначения (GPIO) о TDO Тестирование выходных данных для интерфейса JTAG 606) I/O Р1.28 Линия ввода/вывода общего назначения (GPIO) I' TDI Тестирование входных данных для интерфейса JTAG 566) I/O Р1.29 Линия ввода/вывода общего назначения (GPIO) I ТСК Тестирование синхронизации для интерфейса JTAG 52б) I/O Р1.30 Линия ввода/вывода общего назначения (GPIO) I TMS Тестирование выбора режима для интерфейса JTAG 2о6) I/O Р1.31 Линия ввода/вывода общего назначения (GPIO) I TRST Тестирование сброса для интерфейса JTAG
Глава 7. Цоколевка и назначение выводов 165 Таблица 7.7. Описание выводов микроконтроллеров LPC2141/42/44/46/48 (продолжение) Название Номер вывода Тйп Описание RESET 578) I Вход внешнего сброса: НИЗКИЙ внешний уровень на этом выводе сбрасывает микроконтроллер (при этом состояния портов ввода/вы- вода и периферийных устройствах устанавливаются по умолчанию и процессор начинает выполнение программы с адреса 0). Это ТТЛ- вход с гистерезисом и допустимым входным напряжением 5 В D+ 107> I Линия D+ USB D- 117> I Линия D- USB XTAL1 62” I Вход схемы генератора и внутренних цепей генератора синхросигнала XTAL2 61” О Выход усилителя генератора RTXC1 3” I Вход подключения кварцевого резонатора к генератору RTC RTXC2 5” О Выход подключения кварцевого резонатора к генератору RTC Vss 6, 18, 25, 42, 50 I Заземление: потенциал 0 В VssA 59 I Аналоговое заземление: потенциал 0 В. Несмотря на то что потенциалы входов VSsA и Vss номинально одинаковы, эти входы должны быть изо- лированы друг от друга, чтобы минимизировать шумы и ошибки АЦП Vdd 23,43,51 I 3.3-В электропитание ввода/вывода: напряжение питания для портов ввода/вывода Vdda 7 I Аналоговое 3.3-В электропитание ввода/вывода: несмотря на то что потенциалы входов VDD и VDDA номинально одинаковы, эти входы должны быть изолированы друг от друга, чтобы минимизировать шумы и ошибки АЦП. Используется также в качестве питающего напряжения для АЦП Vref 63 I Опорное напряжение ЦАП и АЦП: несмотря на то что потенциалы входов VDD и VREF номинально одинаковы, эти входы должны быть изолированы друг от друга, чтобы минимизировать шумы и ошибки ЦАП и АЦП. Используется также в качестве опорного напряжения для ЦАП и АЦП Vbat 49 I 3.3-В электропитание модуля RTC: напряжение питания для модуля RTC Обладает толерантностью к напряжению 5 В (т. е. допускает подачу входного напряжения 5 В) и имеет гистерезис 10 нс при изменении уровней ТТЛ. 2) Обладает толерантностью к напряжению 5 В и имеет гистерезис 10 нс при изменении уров- ней ТТЛ. Если линия сконфигурирована в качестве входа, то используется внутренний фильтр для импульсов длительностью менее 3 нс. 3) Обладает толерантностью к напряжению 5 В (используется в случае обмена со скоростью до 400 кГц). Требует внешнего подтягивающего к «плюсу» питания резистора. 4) Обладает толерантностью к напряжению 5 В и имеет гистерезис 10 нс при изменении уров- ней ТТЛ. Линия имеет также функцию аналогового входа. Если линия сконфигурирована в ка- честве входа, то она имеет внутренний фильтр для импульсов длительностью менее 3 нс. Если ли- ния сконфигурирована в качестве входа АЦП, то ее цифровая функция заблокирована. 5) Обладает толерантностью к напряжению 5 В и имеет гистерезис 10 нс при изменении уров- ней ТТЛ. Линия имеет также функцию аналогового выхода. Если линия сконфигурирована в качестве выхода ЦАП, то ее цифровая функция заблокирована. 6) Обладает 'толерантностью к напряжению 5 В и имеет встроенный подтягивающий к «плю- су» питания резистор и гистерезис 10 нс при изменении уровней ТТЛ. Значение сопротивления резистора лежит в диапазоне от 60 до 300k. 7) Линия функционирует в соответствии со спецификацией USB2.0. 8) Линия имеет функцию только цифрового входа, обладает толерантностью к напряжению 5 В и имеет гистерезис 10 нс при изменении уровней ТТЛ. 9) Имеет специальные аналоговые функции.
166 Глава 7. Цоколевка и назначение выводов Описание выводов микроконтроллеров LPC2210/12/14/20/90 с указанием их аль- тернативных функций приведено в Табл. 7.8. Цоколевка корпуса микроконтроллеров LPC2210/12/14/20/90 с указанием номеров и функций выводов приведена на Рис. 7.9. Hi ill со см « Q _ I г- O ® CO h- <0 10 ’t COi^CMr-J^bj^O $2 E £ К Si Si& Si Si Si Si Si Si 28L E 8! 8! S S S Si £S! Si Si Si 2 SZ Si П АП.П.П.П P2.22/D22 С ' 1 v3 Vss P0.21/PWM5/CAP1.3 P0.22/CAP0.0/MAT0.0 P0.23/RD2" P1.19/TRACEPKT3 P0.24/TD21’ Vss P2.23/D23 P2.24/D24 P2.25/D25 P2.26/D26/BOOTO V3A P1.18/TRACEPKT2 P2.27/D27/BOOT1 P2.28/D28 P2.29/D29 P2.30/D30/AIN4 P2.31/D31/AIN5 P0.25/RD11’ TD11’ P0.27/AIN0/CAP0.1/MAT0.1 P1.17/TRACEPKT1 P0.28/AIN1/CAP0.2/MAT0.2 Vss P3.29/BLS2/AIN6 P3.28/BLS3/AIN7 P3.27/WE P3.26/CS1 V3 P0.29/AIN2/CAP0.3/MAT0.3 P0.30/AIN3/EINT3/CAPQ.0 Р1.16ДВАСЕРКТ0 P3.25/CS2 P3.24/CS3 [ c 13 г-Ш ШЯ»Ш T 103 3 ' ' WT,3 100 3 70S 3 104 3 ' . 103 з г лоз з 101 3 W 3 ' 08 3 0? 3 ' OS з 05 3 94 3 ' / S3 3 e 92 3 St 3 s90 з 00 3 94 з 0? 3 ' 08 3 . 'М3 ' 84 3 ' M 3 230 з - 31 з 80 3 ' 78 3 .-77 3 Ч'М 3 ' 'Л 3 'Л4з ' 73 з * <'«« SM«« S'»® »Я »»®»iiU8aStgRg. P2.3/D3 Vss P2.2/D2 P2.1/D1 V3 Vss P1.20/TRACESYNC P0.17/CAP1.2/SCK1/MAT1.2 P0.16/EINT0/MAT0.2/CAP0.2 P0.15/RI1/EINT2 P2.0/D0 P3.30/BLS1 P3.31/BLS0 P1.21/PIPESTAT0 V3 Vss P0.14/DCD1/EINT1 CSO ’ OE P3.0/A0 P3.1/A1 P3.2/A2 P1.22/PIPESTAT1 P0.13/DTR1/MAT1.1 P0.12/DSR1/MAT1.0 P0.11/CTS1/CAP1.1 P1.23/PIPESTAT2 P3.3/A3 P3.4/A4 Vss P0.10/RTS1/CAP1.0 V3 P0.9/RxD1/PWM6/EINT3 P0.8/TxD1/PWM4 P3.5/A5 P3.6/A6 1) Только у LPC2290. d if С с '13 [ с Ш s [ Рис, 7,9, Топологическая схема корпуса LQFP144 микроконтроллеров LPC2210/12/14/20/90 Таблица 7,8. Описание выводов микроконтроллеров LPC2210/12/14/20/90 Название Номер вывода Ъ<п Описание Р0.0...Р0.31 4...6, 8,21, 23, 25, 32, 33,42, 49, 50, 58, 59, 61,68,69, 75, 76, 78, 83...85, 92, 99, 100, 101, 121...123 I/O Порт 0: порт 0 — 32-битный двунаправленный порт ввода/вывода с индивидуальным заданием направления для каждого бита. Функ- ция каждой линии порта 0 выбирается через блок коммутации вы- водов. Выводы 26 и 31 порта 0 не доступны
Глава 7. Цоколевка и назначение выводов 167 Таблица 7.8. Описание выводов микроконтроллеров LPC2210/12/14/20/90 (продолжение) Название Номер вывода Тйп Описание Р0.0...Р0.31 42 I/O РО.О Линия ввода/вывода общего назначения (GPIO) О TxDO Выход передатчика UART0 О PWM1 Выход широтно-импульсного модулятора 1 49 I/O Р0.1 Линия ввода/вывода общего назначения (GPIO) I RxDO Вход приемника UART0 О PWM3 Выход широтно-импульсного модулятора 3 I EINTO Вход внешнего прерывания 0 50 I/O Р0.2 Линия ввода/вывода общего назначения (GPIO) I/O SCL Вход-выход синхронизации 12С. Выход с открытым коллектором (в режиме 12С) I CAPO.O Вход захвата TIMER0, канал 0 58 I/O P0.3 Линия ввода/вывода общего назначения (GPIO) I/O SDA Вход-выход данных 12С. Выход с открытым коллек- тором (в режиме 12С) О MATO.O Выход совпадения TIMER0, канал 0 I EINT1 Вход внешнего прерывания 1 59 I/O P0.4 Линия ввода/вывода общего назначения (GPIO) I/O SCKO Вывод последовательной синхронизации SPI0. Вы- ход синхронизации SPI ведущего или вход ведомого I CAP0.1 Вход захвата TIMER0, канал 1 61 I/O P0.5 Линия ввода/вывода общего назначения (GPIO) I/O MISOO Вход ведущего-выход ведомого SPI0. Вход данных SPI ведущего или выход данных SPI ведомого о MAT0.1 Выход совпадения TIMER0, канал 1 68 I/O P0.6 Линия ввода/вывода общего назначения (GPIO) I/O MOSIO Выход ведущего-вход ведомого SPI0. Выход данных SPI ведущего или вход данных SPI ведомого I CAP0.2 Вход захвата TIMER0, канал 2 69 I/O P0.7 Линия ввода/вывода общего назначения (GPIO) I SSELO Выбор ведомого SPI0. Выбирает интерфейс SPI в качестве ведомого о PWM2 Выход широтно-импульсного модулятора 2 I EINT2 Вход внешнего прерывания 2 75 - I/O P0.8 Линия ввода/вывода общего назначения (GPIO) о TxDl Выход передатчика UART1 о PWM4 Выход широтно-импульсного модулятора 4
168 и Глава 7. Цоколевка и назначение выводов Таблица 7.8. Описание выводов микроконтроллеров LPC2210/12/14/20/90 (продолжение) Название Номер вывода Ъш Описание Р0.0...Р0.31 76 I/O Р0.9 Линия ввода/вывода общего назначения (GPIO) I RxDl Вход приемника UART1 о PWM6 Выход широтно-импульсного модулятора 6 I EINT3 Вход внешнего прерывания 3 78 I/O Р0.10 Линия ввода/вывода общего назначения (GPIO) о RTS1 Выход запроса посылки UART1 I САР1.0 Вход захвата TIMER1, канал 0 83 I/O Р0.11 Линия ввода/вывода общего назначения (GPIO) I CTS1 Вход сброса посылки UART1 I САРЫ Вход захвата TIMER1, канал 1 84 I/O Р0.12 Линия ввода/вывода общего назначения (GPIO) I DSR1 Вход готовности данных UART1 О МАТ1.0 Выход совпадения TIMER1, канал 0 85 I/O Р0.13 Линия ввода/вывода общего назначения (GPIO) о DTR1 Выход готовности данных терминала UART1 о МАТЫ Выход совпадения TIMER1, канал 1 92 I/O Р0.14 Линия ввода/вывода общего назначения (GPIO) I DCD1 Выход обнаружения несущей данных UART1 I EINT1 Вход внешнего прерывания 1. Примечание. НИЗКИЙ уровень на выводе Р0.14, в то время как на выводе RESET также присутствует НИЗКИЙ уровень, приводит к передаче управления встроенному загрузчику после завершения сброса. 99 . I/O Р0.15 Линия ввода/вывода общего назначения (GPIO) I RI1 Вход индикатора вызова UART1 I EINT2 Вход внешнего прерывания 2 100 I/O Р0.16 Линия ввода/вывода общего назначения (GPIO) I EINT0 Вход внешнего прерывания 0 о МАТ0.2 Выход совпадения TIMER0, канал 2 I САР0.2 Вход захвата TIMER0, канал 2 101 I/O Р0.17 Линия ввода/вывода общего назначения (GPIO) г САР1.2 Вход захвата TIMER1, канал 2 I/O SCK1 Вывод последовательной синхронизации SPI1. Вы- ход синхронизации SPI ведущего или вход ведомого о МАТ1.2 Выход совпадения TIMER1, канал 2
Глава 7. Цоколевка и назначение выводов 169 Таблица 7.8. Описание выводов микроконтроллеров LPC2210/12/14/20/90 (продолжение) Название Номер вывода Ъш Описание Р0.0...Р0.31 121 I/O Р0.18 Линия ввода/вывода общего назначения (GPIO) I САР1.3 Вход захвата TIMER1, канал 3 I/O MISO1 Вход ведущего-выход ведомого SPI1. Вход данных SPI ведущего или выход данных SPI ведомого о МАТ1.3 Выход совпадения TIMER1, канал 3 122 I/O Р0.19 Линия ввода/вывода общего назначения (GPIO) о МАТ1.2 Выход совпадения TIMER1, канал 2 I/O MOSI1 Выход ведущего-вход ведомого SPI0. Выход данных SPI ведущего или вход данных SPI ведомого I САР1.2 Вход захвата TIMER1, канал 2 123 I/O Р0.20 Линия ввода/вывода общего назначения (GPIO) О МАТ1.3 Выход совпадения TIMER1, канал 3 I SSEL1 Выбор ведомого SPI1. Выбирает интерфейс SPI в качестве ведомого I EINT3 Вход внешнего прерывания 3 4 I/O Р0.21 Линия ввода/вывода общего назначения (GPIO) о PWM5 Выход широтно-импульсного модулятора 5 I САР1.3 Вход захвата TIMER1, канал 3 5 I/O Р0.22 Линия ввода/вывода общего назначения (GPIO) I САРО.О Вход захвата TIMER0, канал 0 о МАТО.О Выход совпадения TIMER0, канал 0 6 I/O Р0.23 Линия ввода/вывода общего назначения (GPIO) I RD2 Вход приемника CAN2 (только у LPC2290) 8 I/O Р0.24 Линия ввода/вывода общего назначения (GPIO) О TD2 Выход передатчика CAN2 (только у LPC2290) 21 I/O Р0.25 Линия ввода/вывода общего назначения (GPIO) I RD1 Вход приемника CAN1 (только у LPC2290) 23 I/O Р0.27 Линия ввода/вывода общего назначения (GPIO) I AINO АЦП вход 0. Этот аналоговый ввод всегда подклю- чен к данному выводу I САР0.1 Вход захвата TIMER0, канал 1 о МАТ0.1 Выход совпадения TIMER0, канал 1 25 I/O Р0.28 Линия ввода/вывода общего назначения (GPIO) I AIN1 АЦП вход 1. Этот аналоговый ввод всегда подклю- чен к данному выводу I САР0.2 Вход захвата TIMER0, канал 2 о МАТ0.2 Выход совпадения TIMER0, канал 2
170 Глава 7. Цоколевка и назначение выводов Таблица 7.8. Описание выводов микроконтроллеров LPC2210/12/14/20/90 (продолжение) Название Номер вывода Тйп Описание Р0.0...Р0.31 32 I/O Р0.29 Линия ввода/вывода общего назначения (GPIO) I AIN2 АЦП вход 2. Этот аналоговый ввод всегда подклю- чен к данному выводу I САРО.З Вход захвата TIMER0, канал 3 о МАТО.З Выход совпадения TIMER0, канал 3 33 I/O Р0.30 Линия ввода/вывода общего назначения (GPIO) I AIN3 АЦП вход 3. Этот аналоговый ввод всегда подклю- чен к данному выводу I EINT3 Вход внешнего прерывания 3 I САРО.О Вход захвата TIMER0, канал 0 Р1.0...Р1.31 7,15, 24, 34, 43,52,60,70, 82,86,90,91, 95,102,113, 126,140,144 I/O Порт 1: порт 1 — 32-битный двунаправленный порт ввода/вывода с индивидуальным заданием направления для каждого бита. Функ- ция каждой линии порта 1 выбирается через блок коммутации вы- водов. Выводы 0...15 порта 1 недоступны 91 О CS0 Сигнал выбора кристалла 0 с активным НИЗКИМ уровнем. (Банк 0 адресов располагается в области 8000 0000...80FFFFFF) 90 о ОЕ Сигнал разрешения выхода с активным НИЗКИМ уровнем 34 I/O Р1.16 Линия ввода/вывода общего назначения (GPIO) о TRACEPKT0 Трассировка пакетов, бит 0 24 I/O Р1.17 Линия ввода/вывода общего назначения (GPIO) о TRACEPKT1 Трассировка пакетов, бит 1 15 I/O Р1.18 Линия ввода/вывода общего назначения (GPIO) о TRACEPKT2 Трассировка пакетов, бит 2 7 I/O Р1.19 Линия ввода/вывода общего назначения (GPIO) о TRACEPKT3 Трассировка пакетов, бит 3 102 I/O Р1.20 Линия ввода/вывода общего назначения (GPIO) о TRACESYNC Синхронизация трассировки. Примечание. НИЗКИЙ внешний уровень на выводе Р1.20, в то время как на выводе RESET также при- сутствует НЙЗКИЙ уровень, разрешает работу вы- водов Р 1.25:16 в качестве линий трассировки паке- тов после завершения сброса. 95 I/O Р1.21 Линия ввода/вывода общего назначения (GPIO) о PIPESTAT0 Состояние конвейера, бит 0 86 I/O Р1.22 Линия ввода/вывода общего назначения (GPIO) о PIPESTAT1 Состояние конвейера, бит 1 82 I/O Р1.23 Линия ввода/вывода общего назначения (GPIO) о PIPESTAT2 Состояние конвейера, бит 2
Глава 7. Цоколевка и назначение выводов 171 Таблица 7.8. Описание выводов микроконтроллеров LPC2210/12/14/20/90 (продолжение) Название Номер вывода Ъш Описание Р1.0...Р1.31 70 I/O Р1.24 Линия ввода/вывода общего назначения (GPIO) О TRACECLK Тактирование трассировки 60 I/O Р1.25 Линия ввода/вывода общего назначения (GPIO) I EXTIN0 Внешний триггерный вход 52 I/O Р1.26 Линия ввода/вывода общего назначения (GPIO) I/O RTCK Возврат дополнительного сигнала тестирования синхронизации, который добавляется к JTAG- пор- ту и помогает синхронизации отладчика, когда час- тота процессора изменяется. Примечание. НИЗКИЙ внешний уровень на выводе Р1.26, в то время как на выводе RESET также при- сутствует НИЗКИЙ уровень, разрешает работу вы- водов РЕЗ 1:26 в качестве порта отладки после завер- шения сброса. 144 I/O Р1.27 Линия ввода/вывода общего назначения (GPIO) О ТОО Тестирование выходных данных для интерфейса JTAG 140 I/O Р1.28 Линия ввода/вывода общего назначения (GPIO) I TDI Тестирование входных данных для интерфейса JTAG 126 I/O Р1.29 Линия ввода/вывода общего назначения (GPIO) I ТСК Тестирование синхронизации для интерфейса JTAG 113 I/O РЕЗО Линия ввода/вывода общего назначения (GPIO) I TMS Тестирование выбора режима для интерфейса JTAG 43 I/O Р1.31 Линия ввода/вывода общего назначения (GPIO) I TRST Тестирование сброса для интерфейса JTAG Р2.0...Р2.31 1, 10...13, 16...20, 98, 105,106,108, 109, 114...118, 120, 124, 125, 127, 129...134, 136,137 I/O Порт 2: порт 0 — 32-битный двунаправленный порт ввода/вывода с индивидуальным заданием направления для каждого бита. Функ- ция каждой линии порта 0 выбирается через блок коммутации вы- водов. Примечание. Все выводы порта 2, исключая те, которые могут ис- пользоваться как входы АЦП (Р2.30 и Р2.31), допускают подачу внешнего напряжения 5 В. К линии порта 2, сконфигурированной в качестве входа, автоматически подключается встроенный «под- тягивающий» к «плюру» питания резистор, чтобы установить за- данный по умолчанию ВЫСОКИЙ входной уровень. Если АЦП не задействован, то выводы, связанные с АЦП, могут также ис- пользоваться как цифровые выводы I/O с допустимым входным напряжением 5 В. Номинальные электрические параметры входов АЦП см. в Приложении 3. 98 I/O Р2.0 Линия ввода/вывода общего назначения (GPIO) I/O D0 Линия 0 данных внешней памяти 105 I/O Р2.1 Линия ввода/вывода общего назначения (GPIO) I/O D1 Линия 1 данных внешней памяти
172 Глава 7. Цоколевка и назначение выводов Таблица 7.8. Описание выводов микроконтроллеров LPC2210/12/14/20/90 (продолжение) Название Номер вывода Ъш Описание Р2.0...Р2.31 106 I/O Р2.2 Линия ввода/вывода общего назначения (GPIO) I/O D2 Линия 2 данных внешней памяти 108 I/O Р2.3 Линия ввода/вывода общего назначения (GPIO) I/O D3 Линия 3 данных внешней памяти 109 I/O Р2.4 Линия ввода/вывода общего назначения (GPIO) I/O D4 Линия 4 данных внешней памяти 114 I/O Р2.5 Линия ввода/вывода общего назначения (GPIO) I/O D5 Линия 5 данных внешней памяти 115 I/O Р2.6 Линия ввода/вывода общего назначения (GPIO) I/O D6 Линия 6 данных внешней памяти 116 I/O Р2.7 Линия ввода/вывода общего назначения (GPIO) I/O D7 Линия 7 данных внешней памяти 117 I/O Р2.8 Линия ввода/вывода общего назначения (GPIO) I/O D8 Линия 8 данных внешней памяти 118 I/O Р2.9 Линия ввода/вывода общего назначения (GPIO) I/O D9 Линия 9 данных внешней памяти 120 I/O Р2.10 Линия ввода/вывода общего назначения (GPIO) I/O D10 Линия 10 данных внешней памяти 124 I/O P2.ll Линия ввода/вывода общего назначения (GPIO) I/O D11 Линия 11 данных внешней памяти 125 I/O Р2.12 Линия ввода/вывода общего назначения (GPIO) I/O D12 Линия 12 данных внешней памяти 127 I/O Р2.13 Линия ввода/вывода общего назначения (GPIO) I/O D13 Линия 13 данных внешней памяти 129 I/O Р2.14 Линия ввода/вывода общего назначения (GPIO) I/O D14 Линия 14 данных внешней памяти 130 I/O Р2.15 Линия ввода/вывода общего назначения (GPIO) I/O D15 Линия 15 данных внешней памяти 131 I/O Р2.16 Линия ввода/вывода общего назначения (GPIO) I/O' D16 Линия 16 данных внешней памяти 132 I/O Р2.17 Линия ввода/вывода общего назначения (GPIO) I/O D17 Линия 17 данных внешней памяти 133 I/O Р2.18 Линия ввода/вывода общего назначения (GPIO) I/O D18 Линия 18 данных внешней памяти
Глава 7. Цоколевка и назначение выводов 173 Таблица 7.8. Описание выводов микроконтроллеров LPC2210/12/14/20/90 (продолжение) Название Номер вывода Ъш Описание Р2.0...Р2.31 134 I/O Р2.19 Линия ввода/вывода общего назначения (GPIO) I/O D19 Линия 19 данных внешней памяти 136 I/O Р2.20 Линия ввода/вывода общего назначения (GPIO) I/O D20 Линия 20 данных внешней памяти 137 I/O Р2.21 Линия ввода/вывода общего назначения (GPIO) I/O D21 Линия 21 данных внешней памяти 1 I/O Р2.22 Линия ввода/вывода общего назначения (GPIO) I/O D22 Линия 22 данных внешней памяти 10 I/O Р2.23 Линия ввода/вывода общего назначения (GPIO) I/O D23 Линия 23 данных внешней памяти 11 I/O Р2.24 Линия ввода/вывода общего назначения (GPIO) I/O D24 Линия 24 данных внешней памяти 12 I/O Р2.25 Линия ввода/вывода общего назначения (GPIO) I/O D25 Линия 25 данных внешней памяти 13 I/O Р2.26 Линия ввода/вывода общего назначения (GPIO) I/O D26 Линия 26 данных внешней памяти I ВООТО Если на выводе RESET присутствует НИЗКИЙ уро- вень, то через вывод ВООТО (совместно с ВООТ1) производится управление загрузкой и внутренними операциями. Наличие встроенного подтягивающего к «плюсу» питания резистора гарантирует ВЫСО- КИЙ уровень на выводе в том случае, когда он не подключен к входному сигналу 16 I/O Р2.27 Линия ввода/вывода общего назначения (GPIO) I/O D27 Линия 27 данных внешней памяти I ВООТ1 Если на выводе RESET присутствует НИЗКИЙ уровень, то через вывод ВООТ1 (совместно с ВООТО) производится управление загрузкой и внутренними операциями. Наличие встроенного подтягивающего к «плюсу» питания резистора гарантирует ВЫСО- КИЙ уровень на выводе в том случае, когда он не подключен к входному сигналу ВООТ1:0 = 00 Выбирается 8-битная память сигналом CS0 для начальной загрузки ВООТ1:0 = 01 Выбирается 16-битная память сигна- лом CS0 для начальной загрузки ВООТ1:0=Ю Выбирается 32-битная память сигна- лом CS0 для начальной загрузки ВООТ1:0=11 Выбирается внутренняя Flash-память (только у LPC2212/14) ВООТ1:0=11 Выбирается 16-битная память сигна- лом CS0 для начальной загрузки (толь- ко у LPC2210/20/90)
174 Глава 7. Цоколевка и назначение выводов Таблица 7.8. Описание выводов микроконтроллеров LPC2210/12/14/20/90 (продолжение) Название Номер вывода Ъш Описание Р2.0...Р2.31 17 I/O Р2.28 Линия ввода/вывода общего назначения (GPIO) I/O D28 Линия 28 данных внешней памяти 18 I/O Р2.29 Линия ввода/вывода общего назначения (GPIO) I/O D29 Линия 29 данных внешней памяти 19 I/O Р2.30 Линия ввода/вывода общего назначения (GPIO) I/O D30 Линия 30 данных внешней памяти I AIN4 АЦП вход 4. Этот аналоговый вход всегда подклю- чен к данному выводу 20 I/O Р2.31 Линия ввода/вывода общего назначения (GPIO) I/O D31 Линия 31 данных внешней памяти I AIN5 АЦП вход 5. Этот аналоговый вход всегда подклю- чен к данному выводу Р3.0...Р3.31 27...30, 35, 36, 40,41, 44...48, 53, 55, 56, 62—66, 71...74, 80, 81, 87...89, 96, 97 I/O Порт 3: порт 0 — 32-битный двунаправленный порт ввода/вывода с индивидуальным заданием направления для каждого бита. Функ- ция каждой линии порта 0 выбирается через блок коммутации вы- водов. Примечание. Все выводы порта 3, исключая те, которые могут ис- пользоваться как входы АЦП (Р3.28 и Р3.29), допускают подачу внешнего напряжения 5 В. К линии порта 3, сконфигурированной в качестве входа, автоматически подключается встроенный подтя- гивающий к «плюсу» питания резистор, чтобы установить задан- ный по умолчанию ВЫСОКИЙ входной уровень. Если АЦП не задействован, то выводы, связанные с АЦП, могут также использо- ваться как цифровые выводы I/O с допустимым входным напряже- нием 5 В. Номинальные электрические параметры входов АЦП см. в Приложении 3. 89 I/O РЗ.О Линия ввода/вывода общего назначения (GPIO) О АО Линия 0 адреса внешней памяти 88 I/O Р3.1 Линия ввода/вывода общего назначения (GPIO) О А1 Линия 1 адреса внешней памяти 87 I/O Р3.2 Линия ввода/вывода общего назначения (GPIO) О А2 Линия 2 адреса внешней памяти 81 I/O РЗ.З Линия ввода/вывода общего назначения (GPIO) О АЗ Линия 3 адреса внешней памяти 80 I/O Р3.4 Линия ввода/вывода общего назначения (GPIO) О А4 Линия 4 адреса внешней памяти 74 I/O Р3.5 Линия ввода/вывода общего назначения (GPIO) О А5 Линия 5 адреса внешней памяти 73 I/O Р3.6 Линия ввода/вывода общего назначения (GPIO) О А6 Линия 6 адреса внешней памяти 72 I/O Р3.7 Линия ввода/вывода общего назначения (GPIO) О А7 Линия 7 адреса внешней памяти
Глава 7. Цоколевка и назначение выводов 175 Таблица 7.8. Описание выводов микроконтроллеров LPC2210/12/14/20/90 (продолжение) Название Номер вывода Ъш Описание Р3.0...Р3.31 71 I/O Р3.8 Линия ввода/вывода общего назначения (GPIO) О А8 Линия 8 адреса внешней памяти 66 I/O Р3.8 Линия ввода/вывода общего назначения (GPIO) О А9 Линия 9 адреса внешней памяти 65 I/O Р3.10 Линия ввода/вывода общего назначения (GPIO) О А10 Линия 10 адреса внешней памяти 64 I/O P3.ll Линия ввода/вывода общего назначения (GPIO) О АП Линия 11 адреса внешней памяти 63 I/O Р3.12 Линия ввода/вывода общего назначения (GPIO) О А12 Линия 12 адреса внешней памяти 62 I/O Р3.13 Линия ввода/вывода общего назначения (GPIO) О А13 Линия 13 адреса внешней памяти 56 I/O Р3.14 Линия ввода/вывода общего назначения (GPIO) О А14 Линия 14 адреса внешней памяти 55 I/O Р3.15 Линия ввода/вывода общего назначения (GPIO) О А15 Линия 15 адреса внешней памяти 53 I/O Р3.16 Линия ввода/вывода общего назначения (GPIO) о А16 Линия 16 адреса внешней памяти 48 I/O Р3.17 Линия ввода/вывода общего назначения (GPIO) О А17 Линия 17 адреса внешней памяти 47 I/O Р3.18 Линия ввода/вывода общего назначения (GPIO) О А18 Линия 18 адреса внешней памяти 46 I/O Р3.19 Линия ввода/вывода общего назначения (GPIO) О А19 Линия 19 адреса внешней памяти 45 I/O Р3.20 Линия ввода/вывода общего назначения (GPIO) О А20 Линия 20 адреса внешней памяти 44 I/O Р3.21 Линия ввода/вывода общего назначения (GPIO) О А21 Линия 21 адреса внешней памяти 41 I/O Р3.22 Линия ввода/вывода общего назначения (GPIO) О А22 Линия 22 адреса внешней памяти 40 I/O Р3.23 Линия ввода/вывода общего назначения (GPIO) О А23 Линия 23 адреса внешней памяти О XCLK Выход синхронизации
176 Глава 7. Цоколевка и назначение выводов Таблица 7.8. Описание выводов микроконтроллеров LPC2210/12/14/20/90 (продолжение) Название Номер вывода Ъш Описание Р3.0...Р3.31 36 I/O Р3.24 Линия ввода/вывода общего назначения (GPIO) О CS3 Сигнал выбора кристалла 3 с активным НИЗКИМ уровнем. (Банк 3 адресов располагается в области 8300 0000...83FF FFFF) 35 I/O Р3.25 Линия ввода/вывода общего назначения (GPIO) О CS2 Сигнал выбора кристалла 2 с активным НИЗКИМ уровнем. (Банк 2 адресов располагается в области 8200 0000...82FF FFFF) 30 I/O Р3.26 Линия ввода/вывода общего назначения (GPIO) О CS1 Сигнал выбора кристалла 1 с активным НИЗКИМ уровнем. (Банк 1 адресов располагается в области 8100 0000...81FF FFFF) 29 I/O Р3.27 Линия ввода/вывода общего назначения (GPIO) О WE Сигнал разрешения записи с активным НИЗКИМ уровнем 28 I/O Р3.28 Линия ввода/вывода общего назначения (GPIO) О BLS3 Сигнал выбора байтовой организации с активным НИЗКИМ уровнем (Банк 3) I AIN7 АЦП вход 7. Этот аналоговый вход всегда подклю- чен к данному выводу 27 I/O Р3.29 Линия ввода/вывода общего назначения (GPIO) О BLS2 Сигнал выбора байтовой организации с активным НИЗКИМ уровнем (Банк 2) I AIN6 АЦП вход 6. Этот аналоговый вход всегда подклю- чен к данному выводу 97 I/O РЗ.ЗО Линия ввода/вывода общего назначения (GPIO) О BLS1 Сигнал выбора байтовой организации с активным НИЗКИМ уровнем (Банк 1) 96 I/O Р3.31 Линия ввода/вывода общего назначения (GPIO) О BLS0 Сигнал выбора байтовой организации с активным НИЗКИМ уровнем (Банк 0) TD1 22 О TD1 Выход передатчика CAN1 (только у LPC2290) RESET 135 I Вход внешнего сброса: НИЗКИЙ внешний уровень на этом выводе сбрасывает микроконтроллер (при этом состояния портов ввода/вы- вода и периферийных устройствах устанавливаются по умолчанию и процессор начинает выполнение программы с адреса 0). Это ТТЛ-вход с гистерезисом и допустимым входным напряжением 5 В XTAL1 142 I Вход схемы генератора и внутренних цепей генератора синхросигнала XTAL2 141 О Выход усилителя генератора Vss 3, 9, 26, 38, 54, 67, 79, 93, 103, 107, 111, 128 I Заземление: потенциал 0 В
Глава 7. Цоколевка и назначение выводов 177 Таблица 7.8. Описание выводов микроконтроллеров LPC2210/12/14/20/90 (продолжение) Название Номер вывода Ъш Описание VsSA 139 I Аналоговое заземление: потенциал 0 В. Несмотря на то что потен- циалы входов VSSA и Vss номинально одинаковы, эти входы долж- ны быть изолированы друг от друга, чтобы минимизировать шумы и ошибки АЦП VsSA_PLL 138 I PLL аналоговое заземление: потенциал 0 В. Несмотря на то что по- тенциалы входов VSSAPLL и Vss номинально одинаковы, эти входы должны быть изолированы друг от друга, чтобы минимизировать шумы и ошибки АЦП V]8 37, НО I 1.8-В электропитание ядра: напряжение питания для внутренних схем микроконтроллера, в т. ч. процессорного ядра V18A 143 I Аналоговое 1.8-В электропитание ядра: напряжение питания для внутренних схем микроконтроллера. Несмотря на то что потенци- алы входов V18 и V18A номинально одинаковы, эти входы должны быть изолированы друг от друга, чтобы минимизировать шумы и ошибки АЦП V3 2,31,39,51, 57, 77, 94, 104, 112,119 I 3.3-В электропитание ввода/вывода: напряжение питания для пор- тов ввода/вывода V3A 14 I Аналоговое 3.3-В электропитание ввода/вывода: несмотря на то что потенциалы входов V3 и V3A номинально одинаковы, эти входы должны быть изолированы друг от друга, чтобы минимизировать шумы и ошибки АЦП. Используется также в качестве опорного напряжения для АЦП 304
ГЛАВА 8 БЛОК КОММУТАЦИИ ВЫВОДОВ 8.1. Назначение Блок коммутации выводов позволяет производить индивидуальное конфи- гурирование выводов микроконтроллера для назначения им требуемых функ- ций. Регистры управления блока коммутации выводов управляют мультиплек- сорами, которые производят подключение выводов микроконтроллера к встро- енным периферийным устройствам. Периферийные устройства должны быть подключены к соответствующим выводам с помощью блока коммутации до то- го, как они будут активизированы, а также до разрешения любых связанных с ними прерываний. Активизация любой периферийной функции, которая не подключена к связанному с ней выводу, приведет к неопределенному результату. Выбор для подключения к выводу порта одной функции полностью исклю- чает все другие функции, которые могут быть доступны на том же самом выво- де. Единственное частичное исключение из этого правила имеет место для вхо- дов АЦП. Вне зависимости от функции, которая выбрана для вывода порта, к которому подключен вход АЦП, этот вход АЦП может читаться микроконтрол- лером в любое время и изменение внешнего напряжения на нем будет отражено в регистре результата аналого-цифрового преобразования. Однако корректное чтение результата АЦП может быть произведено если для данного вывода выбрана функция аналогового входа АЦП, поскольку толь- ко в этом случае будет активизирована соответствующая схема интерфейса между выводом и модулем АЦП. Во всех других случаях (когда данный вывод назначен для выполнения другой функции), подключение цифровых логичес- ких схем, необходимых для активизации этой функции, приведет к некоррект- ному проведению аналого-цифрового преобразования. 8.2. Описание регистров Модуль управления выводами микроконтроллеров LPC2101/02/03/04/05/06 содержит регистры, перечисленные в Табл. 8.1. Таблица 8.1. Карта регистров блока коммутации выводов микроконтроллеров LPC2101/02/03/04/05/06 Название Описание Доступ Значение после сброса Адрес PINSEL0 Регистр выбора функций выводов 0 R/W 0x0000 0000 0хЕ002С000 PINSEL1 Регистр выбора функций выводов 1 R/W 0x0000 0000 0хЕ002С004
8.2. Описание регистров 179 Модуль управления выводами микроконтроллеров LPC2114/24/19/29/94 и LPC2212/14/92/94/10/20/90 содержит регистры, перечисленные в Табл. 8.2. Таблица 8.2. Карта регистров блока коммутации выводов микроконтроллеров LPC2114/24/19/29/94 и LPC2212/14/92/94/10/20/90 Название Описание Доступ Значение после сброса Адрес PINSELO Регистр выбора функций выводов 0 R/W 0x0000 0000 0хЕ002С000 PINSEL1 Регистр выбора функций выводов 1 R/W 0x1540 0000 0хЕ002С004 PINSEL2 Регистр выбора функций выводов 2 R/W См. Табл. 8.19 и Табл. 8.20 0хЕ002С014 Модуль управления выводами микроконтроллеров LPC2131/32/38/41/42/48 и LPC2234/36/44/46 содержит регистры, перечисленные в Табл. 8.3. Таблица 8.3. Карта регистров блока коммутации выводов микроконтроллеров LPC2131/32/38/41/42/48/34/36/44/46 Имя Описание Доступ Значение после сброса Адрес PINSELO Регистр выбора функций выводов 0 R/W 0x0000 0000 0хЕ002С000 PINSEL1 Регистр выбора функций выводов 1 R/W 0x0000 0000 0хЕ002С004 PINSEL2 Регистр выбора функций выводов 2 R/W См. Табл. 8.21 0хЕ002С014 Регистр выбора функций выводов О (PINSELO — 0хЕ002С000) Битовая структура регистра PINSELO для LPC2101/01/03 приведена в Табл. 8.4. Таблица 8.4. Биты регистра выбора функций выводов 0 для LPC2101/02/03 (PINSELO - 0хЕ002С000) PINSELO Название вывода Функция при 00 Функция при 01 Функция при 10 Функция при 11 Значение после сброса 1:0 РО.О GPIO-порт 0.0 TxDO (UART0) Совпадение 3.1 (TIMER3) Зарезервирован 00 3:2 Р0.1 GPIO-порт 0.1 RxDO (UART0) Совпадение 3.2 (TIMER3) Зарезервирован 00 5:4 Р0.2 GPIO-порт 0.2 SCLO (I2C0) Захват 0.0 (TIMER0) Зарезервирован 00 7:6 РО.З GPIO-порт 0.3 SDA0 (I2C0) Совпадение 0.0 (TIMER0) Зарезервирован 00 9:8 РОЛ GPIO-порт 0.4 SCK0 (SPIO) Захват 0.1 (TIMER0) Зарезервирован 00 11:10 Р0.5 GPIO-порт 0.5 MISOO (SPIO) Совпадение 0.1 (TIMER0) Зарезервирован 00 13:12 Р0.6. GPIO-порт 0.6 MOSIO (SPIO) Захват 0.2 (TIMER0) Зарезервирован 00 15:14 Р0.7 GPIO-порт 0.7 SSELO (SPIO) Совпадение 2.0 (TIMER2) Зарезервирован 00 17:16 Р0.8 GPIO-порт 0.8 TxDl (UART1) Совпадение 2.1 (TIMER2) Зарезервирован 00 19:18 Р0.9 GPIO-порт 0.9 RxDl (UART1) Совпадение 2.2 (TIMER2) Зарезервирован 00 21:20 Р0.10 GPIO-порт 0.10 RTSl(UARTl) Захват 1.0 (TIMER1) AD0.3 00
180 Глава 8. Блок коммутации выводов Таблица 8.4. Биты регистра выбора функций выводов 0 для LPC2101/02/03 (PINSEL0 — 0хЕ002С000) (продолжение) PINSEL0 Название вывода Функция при 00 Функция при 01 Функция при 10 Функция при 11 Значение после сброса 23:22 Р0.11 GPIO-порт 0Л1 CTSl(UARTl) Захват 1.1 (TIMER1) AD0.4 00 25:24 Р0.12 GPIO-порт 0.12 DSRl(UARTl) Совпадение 1.0 (TIMER1) AD0.5 00 27:26 РОЛЗ GPIO-портОЛЗ Зарезервиро- ван Совпадение 1.1 (TIMER1) DTR1 (UART1) 00 29:28 РОЛ 4 СРЮ-портОЛ4 EINT1 SCK1 (SSP1) DCD1 (UART1) 00 31:30 РОЛ 5 СРЮ-портОЛ5 EINT2 Зарезервирован Rll (UART1) 00 Битовая структура регистра PINSEL0 для LPC2104/05/06 приведена в Табл. 8.5. Таблица 8.5. Биты регистра выбора функций выводов 0 для LPC2104/05/06 (PINSEL0 - 0хЕ002С000) PINSEL0 Название вывода Функция при 00 Функция при 01 Функция при 10 Функция при 11 Значение после сброса 1:0 РО.О GPIO-порт 0.0 TxD (UART0) PWM1 Зарезервирован 00 3:2 РОЛ GPIO-портОЛ RxD (UART0) PWM3 Зарезервирован 00 5:4 Р0.2 GPIO-порт 0.2 SCL (I2C) Захват 0.0 (TIMER0) Зарезервирован 00 7:6 РО.З GPIO-порт 0.3 SDA(I2C) Совпадение 0.0 (TIMER0) Зарезервирован 00 9:8 РОЛ GPIO-порт 0.4 SCK(SPI) Захват 0.1 (TIMER0) Зарезервирован 00 11:10 Р0.5 GPIO-порт 0.5 MISO (SPI) Совпадение 0.1 (TIMER0) Зарезервирован 00 13:12 Р0.6 GPIO-порт 0.6 MOSI (SPI) Захват 0.2 (TIMER0) Зарезервирован 00 15:14 Р0.7 GPIO-порт 0.7 SSEL (SPI) PWM2 Зарезервирован 00 17:16 Р0.8 GPIO-порт 0.8 TxD (UART1) PWM4 Зарезервирован 00 19:18 Р0.9 GPIO-порт 0.9 RxD (UART1) PWM 6 Зарезервирован 00 21:20 Р0.10 GPIO-портО.Ю RTS(UARTl) Захват 1.0 (TIMER1) Зарезервирован 00 23:22 Р0.11 GPIO-порт 0.11 CTS(UARTl) Захват 1.1 (TIMER1) Зарезервирован 00 25:24 РОЛ 2 GPIO-порт 0.12 DSR(UARTl) Совпадение 1.0 (TIMER1) Зарезервирован 00 27:26 РОЛЗ GPIO-порт 0.13 DTR(UARTl) Совпадение 1.1 (TIMER1) Зарезервирован 00 29:28 Р0.14 GPIO-порт 0.14 CD(UARTl) EINT1 Зарезервирован 00 31:30 РОЛ 5 GPIO-порт 0.15 RI(UARTl) EINT2 Зарезервирован 00 Битовая структура регистра PINSEL0 для LPC2114/24/19/29 и LPC2212/14/92 приведена в Табл. 8.6.
8.2. Описание регистров 181 Таблица 8.6. Биты регистра выбора функций выводов 0 для LPC2114/24/19/29 и LPC2212/14/92 (PINSEL0 - 0хЕ002С000) PINSEL0 Название вывода Функция при 00 Функция при 01 Функция при 10 Функция при 11 Значение после сброса 1:0 РО.О GPIO-порт 0.0 TxD (UART0) PWM1 Зарезервирован 00 3:2 Р0.1 GPIO-порт 0.1 RxD (UART0) PWM3 EINT0 00 5:4 Р0.2 GPIO-порт 0.2 SCL (I2C) Захват 0.0 (TIMER0) Зарезервирован 00 7:6 РО.З GPIO-порт 0.3 SDA (I2C) Совпадение 0.0 (TIMER0) EINT1 00 9:8 Р0.4 GPIO-порт 0.4 SCK (SPIO) Захват 0.1 (TIMER0) Зарезервирован 00 11:10 Р0.5 GPIO-порт 0.5 MISO (SPIO) Совпадение 0.1 (TIMER0) Зарезервирован 00 13:12 Р0.6 GPIO-порт 0.6 MOSI (SPIO) Захват 0.2 (TIMER0) Зарезервирован 00 15:14 Р0.7 GPIO-порт 0.7 SSEL (SPIO) PWM2 EINT2 00 17:16 Р0.8 GPIO-порт 0.8 TxD (UART1) PWM4 Зарезервирован 00 19:18 Р0.9 GPIO-порт 0.9 RxD (UART1) PWM6 EINT3 00 21:20 Р0.10 GPIO-портО.Ю RTS (UART1) Захват 1.0 (TIMER1) Зарезервирован 00 23:22 Р0.11 GPIO-порт 0.11 CTS (UART1) Захват 1.1 (TIMER1) Зарезервирован 00 . 25:24 РОЛ 2 GPIO-порт 0.12 DSR(UARTl) Совпадение 1.0 (TIMER1) Зарезервирован 00 27:26 РОЛЗ GPIO-порт 0.13 DTR(UARTl) Совпадение 1.1 (TIMER1) Зарезервирован 00 29:28 РОЛ 4 GPIO-порт 0.14 CD (UART1) EINT1 Зарезервирован 00 31:30 РОЛ 5 GPIO-порт 0.15 RI (UART1) EINT2 Зарезервирован 00 Битовая структура регистра PINSEL0 для LPC2194 и LPC2294/10/20/90 приведена в Табл. 8.7. Таблица 8.7. Биты регистра выбора функций выводов 0 для LPC2194 и LPC2294/10/20/90 (PINSEL0 - 0хЕ002С000) PINSEL0 Название вывода Функция при 00 Функция при 01 Функция при 10 Функция при И Значение после сброса 1:0 РО.О GPIO-порт 0.0 TxD (UART0) PWM1 Зарезервирован 00 3:2 Р0>1 GPIO-порт 0.1 RxD (UART0) PWM3 EINT0 00 5:4 Р0.2 GPIO-порт 0.2 SCL (I2C) Захват 0.0 (TIMER0) Зарезервирован 00 7:6 РО.З GPIO-порт 0.3 SDA(I2C) Совпадение 0.0 (TIMER0) EINT1 00 9:8 РОЛ GPIO-порт 0.4 SCK (SPIO) Захват 0.1 (TIMER0) Зарезервирован 00 11:10 Р0.5 GPIO-порт 0.5 MISO (SPIO) Совпадение 0.1 (TIMER0) Зарезервирован 00
182 Глава 8. Блок коммутации выводов Таблица 8.7. Биты регистра выбора функций выводов 0 для LPC2194 и LPC2294/10/20/90 (PINSELO — 0хЕ002С000) (продолжение) PINSELO Название вывода Функция при 00 Функция при 01 Функция при 10 Функция при 11 Значение после сброса 13:12 Р0.6 GPIO-порт 0.6 MOSI (SPIO) Захват 0.2 (TIMER0) Зарезервирован 00 15:14 Р0.7 GPIO-порт 0.7 SSEL (SPIO) PWM2 EINT2 00 17:16 Р0.8 GPIO-порт 0.8 TxD (UART1) PWM4 Зарезервирован 00 19:18 Р0.9 GPIO-порт 0.9 RxD (UART1) PWM6 EINT3 00 21:20 Р0.10 GPIO-портО.Ю RTS (UART1) Захват 1.0 (TIMER1) Зарезервирован 00 23:22 Р0.11 GPIO-порт 0.11 CTS (UART1) Захват 1.1 (TIMER1) Зарезервирован 00 25:24 РОЛ 2 GPIO-порт 0.12 DSR(UARTl) Совпадение 1.0 (TIMER1) RD41* (Конт- роллер CAN 4) 00 27:26 РОЛЗ GPIO-порт 0.13 DTR (UART1) Совпадение 1.1 (TIMER1) TD4’>(Koht- роллер CAN 4) 00 29:28 Р0.14 GPIO-порт 0.14 CD (UART1) EINT1 Зарезервирован 00 31:30 РОЛ 5 GPIO-порт 0.15 RI (UART1) EINT2 Зарезервирован 00 Контроллер CAN 4 доступен только в LPC2294. Для всех других микроконтроллеров соот- ветствующие выводы в данном режиме зарезервированы. Битовая структура регистра PINSELO для LPC2131/32/34/36/38 приведена в Табл. 8.8. Таблица 8.8. Биты регистра выбора функций выводов 0 для LPC2131/32/34/36/38 (PINSELO - 0хЕ002С000) PINSELO Название вывода Функция при 00 Функция при 01 Функция при 10 Функция при 11 Значение после сброса 1:0 РО.О GPIO-порт 0.0 TxD (UART0) PWM1 Зарезервирован 00 3:2 Р0.1 GPIO-порт 0.1 RxD (UART0) PWM3 EINT0 00 5:4 Р0.2 GPIO-порт 0.2 SCLO (I2C) Захват 0.0 (TIMER0) Зарезервирован 00 7:6 РО.З GPIO-порт 0.3 SDA0 (I2C) Совпадение 0.0 (TIMER0) EINT1 00 9:8 Р0.4 GPIO-порт 0.4 SCK(SPIO) Захват 0.1 (TIMER0) AD0.6 00 11:10 Р0.5 GPIO-nopT0.5 MISO (SPIO) Совпадение 0.1 (TIMER0) AD0.7 00 13:12 Р0.6 . GPIO-порт 0.6 MOSI (SPIO) Захват 0.2 (TIMER0) AD1.0 (LPC2134/36/38) 00 15:14 Р0.7 GPIO-порт 0.7 SSEL (SPIO) PWM2 EINT2 00 17:16 Р0.8 GPIO-nopTO.8 TxD (UART1) PWM4 AD1.1 (LPC2134/36/38) 00 19:18 Р0.9 GPIO-порт 0.9 RxD (UART1) PWM6 EINT3 00 21:20 Р0.10 GPIO-портО.Ю RTS (UART1) (LPC2134/36/38) Захват 1.0 (TIMER1) AD1.2 (LPC2134/36/38) 00
8.2. Описание регистров 183 Таблица 8.8. Биты регистра выбора функций выводов 0 для LPC2131/32/34/36/38 (PINSEL0 — 0хЕ002С000) (продолжение) PINSEL0 Название вывода Функция при 00 Функция при 01 Функция при 10 Функция при 11 Значение после сброса 23:22 Р0.11 GPIO-порт 0Л1 CTS (UART1) (LPC2134/36/38) Захват 1.1 (TIMER1) SCL1 (I2C1) 00 25:24 Р0.12 GPIO-порт 0Л 2 DSR (UART1) (LPC2134/36/38) Совпадение 1.0 (TIMER1) AD1.3 (LPC2134/36/38) 00 27:26 РОЛЗ GPIO-порт ОЛЗ DTR (UART1) (LPC2134/36/38) Совпадение 1.1 (TIMER1) AD1.4 (LPC2134/36/38) 00 29:28 РОЛ 4 GPIO-порт 0Л4 CD (UART1) (LPC2134/36/38) EINT1 SDA1 (I2C1) 00 31:30 РОЛ 5 GPIO-порт ОЛ 5 RI (UART1) (LPC2134/36/38) EINT2 AD1.5 (LPC2134/36/38) 00 Битовая структура регистра PINSEL0 для LPC2141/42/44/46/48 приведена в Табл. 8.9. Таблица 8.9. Биты регистра выбора функций выводов 0 для LPC2141/42/44/46/48 (PINSEL0 - 0хЕ002С000) PINSEL0 Название вывода Функция при 00 Функция при 01 Функция при 10 Функция при 11 Значение после сброса 1:0 РО.О GPIO-порт 0.0 TxD (UART0) PWM1 Зарезервирован 00 3:2 РОЛ GPIO-порт 0.1 RxD (UART0) PWM3 EINT0 00 5:4 Р0.2 GPIO-nopTO.2 SCLO (I2C) Захват 0.0 (TIMER0) Зарезервирован 00 7:6 РО.З GPIO-порт 0.3 SDA0 (I2C) Совпадение 0.0 (TIMER0) EINT1 00 9:8 Р0.4 GPIO-порт 0.4 SCKO (SPIO) Захват 0.1 (TIMER0) AD0.6 00 11:10 Р0.5 GPIO-порт 0.5 MISOO (SPIO) Совпадение 0.1 (TIMER0) AD0.7 00 13:12 Р0.6 GPIO-порт 0.6 MOSIO (SPIO) Захват 0.2 (TIMER0) AD1.0 (LPC2144/46/48) • 00 15:14 Р0.7 GPIO-порт 0.7 SSELO (SPIO) PWM2 EINT2 00 17:16 Р0.8 GPIO-порт 0.8 TxD (UART1) PWM4 ADl.l (LPC2144/46/48) 00 19:18 Р0.9 GPIO-порт 0.9 RxD (UART1) PWM6 EINT3 00 21:20 Р0.10 GPIO-портО.Ю RTS (UART1) (LPC2144/46/48) Захват 1.0 (TIMER1) ADI.2 (LPC2144/46/48) 00 23:22 РОДТ GPIO-порт 0.11 CTS (UART1) (LPC2144/46/48) Захват 1.1 (TIMER1) SCL1 (I2C1) 00 25:24 Р0.12 GPIO-порт 0.12 DSR(UARTl) (LPC2144/46/48) Совпадение 1.0 (TIMER1) AD1.3 (LPC2144/46/48) 00 27:26 РОЛЗ GPIO-порт 0.13 DTR(UARTl) (LPC2144/46/48) Совпадение 1.1 (TIMER1) AD 1.4 (LPC2144/46/48) 00 29:28 Р0.14 GPIO-порт 0.14 DCD (UART1) (LPC2144/46/48) EINT1 SDA1 (I2C1) 00 31:30 РОЛ 5 GPIO-порт 0.15 RI (UART1) (LPC2144/46/48) EINT2 AD1.5 (LPC2144/46/48) 00
184 Глава 8. Блок коммутации выводов Регистр PINSELO управляет функциями выводов, согласно перечисленным в Табл. 8.10 параметрам настройки. Направление передачи данных (вход/вы- ход) для каждого из выводов определяется состоянием служебного бита выбора направления в регистре IOODIR (см. Табл. 9.8), но лишь в том случае, когда для вывода назначена функция линии ввода/вывода общего назначения (GPIO). Если вывод выбран для выполнения других функций, то направление передачи данных через него устанавливается автоматически. Таблица 8.10. Биты регистров выбора функций выводов Значения PinselO и Pinsell Функция бита Значение после сброса 0 0 Первичная (заданная по умолчанию) функция, как пра- вило, порт GPIO 00 0 1 Первая альтернативная функция 1 0 Вторая альтернативная функция 1 1 Зарезервировано Регистр выбора функций выводов 1 (PINSEL1 — 0хЕ002С004) Битовая структура регистра PINSEL1 для LPC2101/01/03 приведена в Табл. 8.11. Таблица 8.11. Биты регистра выбора функций выводов 1 для LPC2101/01/03 (PINSEL1 - 0хЕ002С004) PINSEL1 Название вывода Функция при 00 Функция при 01 Функция при 10 Функция при 11 Значение после сброса 1:0 Р0.16 GPIO-порт 0.16 EINT0 Совпадение 0.2 (TIMER0) Зарезервирован 00 3:2 Р0.17 GPIO-порт 0.17 SCL1 (I2C1) Захват 1.2 (TIMER1) Зарезервирован 00 5:4 Р0.18 GPIO-порт 0.18 SDA1 (I2C1) Захват 1.3 (TIMER1) Зарезервирован 00 7:6 Р0.19 GPIO-порт 0.19 MISO1 (SPI1) Совпадение 1.2 (TIMER1) Зарезервирован 00 9:8 Р0.20 GPIO-порт 0.20 MOSI1 (SPI1) Совпадение 1.3 (TIMER1) Зарезервирован 00 11:10 Р0.21 GPIO-порт 0.21 SSEL1 (SPI1) Совпадение 3.0 (TIMER3) Зарезервирован 00 13:12 Р0.22 GPIO-порт 0.22 Зарезервирован Зарезервирован AD0.0 00 15:14 Р0.23 GPIO-Порт 0.23 Зарезервирован Зарезервирован AD0.1 00 17:16 Р0.24 GPIO-порт0.24 Зарезервирован Зарезервирован AD0.2 00 19:18 Р0.25 GPIO-порт 0.25 Зарезервирован Зарезервирован AD0.6 00 21:20 Р0.26 GPIO-порт 0.26 Зарезервирован Зарезервирован AD0.7 00 23:22 Р0.27 GPIO-порт 0.27 TRST (JTAG) Захват 2.0 (TIMER2) Зарезервирован 00 25:24 Р0.28 GPIO-порт 0.28 TMS (JTAG) Захват 2.1 (TIMER2) Зарезервирован 00
8.2. Описание регистров 185 Таблица 8.11. Биты регистра выбора функций выводов 1 для LPC2101/01/03 (PINSEL1 — 0хЕ002С004) (продолжение) PINSEL1 Название вывода Функция при 00 Функция при 01 Функция при 10 Функция при 11 Значение после сброса 27:26 Р0.29 GPIO-порт 0.29 ТСК (JTAG) Захват 2.2 (TIMER2) Зарезервирован 00 29:28 РО.ЗО GPIO-порт 0.30 TDI (JTAG) Совпадение 3.3 (TIMER3) Зарезервирован 00 31:30 Р0.31 GPIO-порт 0.31 TDO (JTAG) Зарезервирован Зарезервирован 00 Битовая структура регистра PINSEL1 для LPC2104/05/06 приведена в Табл. 8.12. Таблица 8.12. Биты регистра выбора функций выводов 1 для LPC2104/05/06 (PINSEL1 - 0хЕ002С004) PINSEL1 Название вывода Функция при 00 Функция при 01 Функция при 10 Функция при 11 Значение после сброса 1:0 Р0.16 GPIO-порт 0.16 EINT0 Совпадение 0.2 (TIMER0) Зарезервирован 00 3:2 Р0.17 GPIO-порт 0.17 Захват 1.2 (TIMER1) Зарезервирован Зарезервирован 00 5:4 Р0.18 GPIO-порт 0.18 Захват 1.3 (TIMER1) Зарезервирован Зарезервирован 00 7:6 Р0.19 GPIO-порт 0.19 Совпадение 1.2 (TIMER1) Зарезервирован Зарезервирован 00 9:8 Р0.20 GPIO-порт 0.20 Совпадение 1.3 (TIMER1) Зарезервирован Зарезервирован 00 11:10 Р0.21 GPIO-порт 0.21 PWM5 Зарезервирован Зарезервирован 00 13:12 Р0.22 GPIO-порт 0.22 Зарезервирован Зарезервирован Зарезервирован 00 15:14 Р0.23 GPIO-порт 0.23 Зарезервирован Зарезервирован Зарезервирован 00 17:16 Р0.24 GPIO-порт 0.24 Зарезервирован Зарезервирован Зарезервирован 00 19:18 Р0.25 GPIO-порт 0.25 Зарезервирован Зарезервирован Зарезервирован 00 21:20 Р0.26 GPIO-порт 0.26 Зарезервирован Зарезервирован Зарезервирован 00 23:22 Р0.27 GPIO-порт 0.27 TRST (JTAG) Зарезервирован Зарезервирован 00 25:24 Р0.28 GPIO-порт 0.28 TMS (JTAG) Зарезервирован Зарезервирован 00 27:26 Р0.29 GPIO-порт 0.29 ТСК (JTAG) Зарезервирован Зарезервирован 00 29:28 РО.ЗО GPIO-порт 0.30 TDI (JTAG) Зарезервирован Зарезервирован 00 31:30 Р0.31 GPIO-порт 0.31 TDO (JTAG) Зарезервирован Зарезервирован 00
186 и Глава 8. Блок коммутации выводов Битовая структура регистра PINSEL1 для LPC2119/29 и LPC2292/90 приве- дена в Табл. 8.13. Таблица 8.13. Биты регистра выбора функций выводов 1 для LPC2119/29 и LPC2292/90 (PINSEL1 - 0хЕ002С004). PINSEL1 Название вывода Функция при 00 Функция при 01 Функция при 10 Функция при 11 Значение после сброса 1:0 Р0.16 GPIO-порт 0.16 EINT0 Совпадение 0.2 (TIMER0) Захват 0.2 (TIMER0) (Зарезервиро- ван у LPC2290) 00 3:2 Р0.17 GPIO-nopTO.17 Захват 1.2 (TIMER1) SCK(SPIl) Совпадение 1.2 (TIMER1) 00 5:4 Р0.18 GPIO-nopT0.18 Захват 1.3 (TIMER1) MISO (SPI1) Совпадение 1.3 (TIMER1) 00 7:6 Р0.19 GPIO-порт 0.19 Совпадение 1.2 (TIMER1) MOSI (SPI1) Захват 1.2 (TIMER1) 00 9:8 Р0.20 GPIO-порт 0.20 Совпадение 1.3 (TIMER1) SSEL (SPI1) EINT3 00 11:10 Р0.21 GPIO-порт 0.21 PWM5 Зарезервирован Захват 1.3 (TIMER1) 00 13:12 Р0.22 GPIO-порт 0.22 Зарезервирован Захват 0.0 (TIMER0) Совпадение 0.0 (TIMER0) 00 15:14 Р0.23 GPIO-порт 0.23 RD2 (контрол- лер CAN 2) Зарезервирован Зарезервирован 00 17:16 Р0.24 GPIO-порт 0.24 TD2 (контрол- лер CAN 2) Зарезервирован Зарезервирован 00 19:18 Р0.25 GPIO-порт 0.25 RD1 (контрол.- лер CAN 1) Зарезервирован Зарезервирован 00 ’ 21:20 Р0.26 Зарезервирован 00 23:22 Р0.27 GPIO-порт 0.27 AINO (АЦП) Захват 0.1 (TIMER0) Совпадение 0.1 (TIMER0) 00 25:24 Р0.28 GPIO-порт 0.28 AIN1 (АЦП) Захват 0.2 (TIMER0) Совпадение 0.2 (TIMER0) 00 27:26 Р0.29 GPIO-порт 0.29 AIN2 (АЦП) Захват 0.3 (TIMER0) Совпадение 0.3 (TIMER0) 00 29:28 РО.ЗО GPIO-порт 0.30 AIN3 (АЦП) EINT3 Захват 0.0 (TIMER0) 00 31:30 Р0.31 Зарезервирован 00 Битовая структура регистра PINSEL1 для LPC2114/24h LPC2212/14 приве- дена в Табл. 8.14.
8.2. Описание регистров 187 Таблица 8.14. Биты регистра выбора функций выводов 1 для LPC2114/24 и LPC2212/14 (PINSEL1 - 0хЕ002С004) PINSEL1 Название вывода Функция при 00 Функция при 01 Функция при 10 Функция при 11 Значение после сброса 1:0 Р0.16 GPIO-порт 0.16 EINT0 Совпадение 0.2 (TIMER0) Захват 0.2 (TIMER0) 00 3:2 Р0.17 GPIO-nopTO.17 Захват 1.2 (TIMER1) SCK (SPI1) Совпадение 1.2 (TIMER1) 00 5:4 Р0.18 GPIO-порт 0.18 Захват 1.3 (TIMER1) MISO (SPI1) Совпадение 1.3 (TIMER1) 00 7:6 Р0.19 GPIO-порт 0.19 Совпадение 1.2 (TIMER1) MOSI(SPIl) Совпадение 1.3 (TIMER1) 00 9:8 Р0.20 GPIO-порт 0.20 Совпадение 1.3 (TIMER1) SSEL (SPI1) EINT3 00 11:10 Р0.21 GPIO-порт 0.21 PWM5 Зарезервирован Захват 1.3 (TIMER1) 00 13:12 Р0.22 GPIO-порт 0.22 Зарезервирован Захват 0.0 (TIMER0) Совпадение 0.0 (TIMER0) 00 15:14 Р0.23 GPIO-порт 0.23 Зарезервирован Зарезервирован Зарезервирован 00 17:16 Р0.24 GPIO-порт 0.24 Зарезервирован Зарезервирован Зарезервирован 00 19:18 Р0.25 GPIO-порт 0.25 Зарезервирован Зарезервирован Зарезервирован 00 21:20 Р0.26 Зарезервирован 00 23:22 Р0.27 GPIO-порт 0.27 AIN0 (АЦП) Захват 0.1 (TIMER0) Совпадение 0.1 (TIMER0) 00 25:24 Р0.28 GPIO-порт 0.28 AIN1 (АЦП) Захват 0.2 (TIMER0) Совпадение 0.2 (TIMER0) 00 27:26 Р0.29 GPIO-порт 0.29 AIN2 (АЦП) Захват 0.3 (TIMER0) Совпадение 0.3 (TIMER0) 00 29:28 РО.ЗО GPIO-порт 0.30 AIN3 (АЦП) EINT3 Захват 0.0 (TIMER0) 00 31:30 Р0.31 Зарезервирован 00 Битовая структура регистра PINSEL1 для LPC2194/2294 приведена в Табл. 8.15. Таблица 8.15. Биты регистра выбора функций выводов 1 для LPC2194/2294 (PINSEL1 - 0хЕ002С004) PINSEL1 Название вывода Функция при 00 Функция при 01 Функция при 10 Функция при 11 Значение после сброса 1:0 Р0.16 GPIO-порт 0.16 EINT0 Совпадение 0.2 (TIMER0) Захват 0.2 (TIMER0) 00 3:2 РОЛ 7 GPIO-порт 0.17 Захват 1.2 (TIMER1) SCK(SPIl) Совпадение 1.2 (TIMER1) 00 5:4 Р0.18 GPIO-порт 0.18 Захват 1.3 (TIMER1) MISO (SPI1) Совпадение 1.3 (TIMER1) 00 7:6 Р0.19 GPIO-порт 0.19 Совпадение 1.2 (TIMER1) MOSI (SPI1) Захват 1.2 (TIMER1) 00 9:8 Р0.20 GPIO-порт 0.20 Совпадение 1.3 (TIMER1) SSEL (SPI1) EINT3 00
188 Глава 8. Блок коммутации выводов Таблица 8.15. Биты регистра выбора функций выводов 1 для LPC2194/2294 (PINSEL1 — 0хЕ002С004) (продолжение) PINSEL1 Название вывода Функция при 00 Функция при 01 Функция при 10 Функция при 11 Значение после сброса 11:10 Р0.21 GPIO-порт 0.21 PWM5 RD3°(Koht- роллер CAN 3) Захват 1.3 (TIMER1) 00 13:12 Р0.22 GPIO-порт 0.22 TD31* (контрол- лер CAN 3) Захват 0.0 (TIMER0) Совпадение 0.0 (TIMER0) 00 15:14 Р0.23 GPIO-порт 0.23 RD2 (контрол- лер CAN 2) Зарезервиро- ван Зарезервирован 00 17:16 Р0.24 GPIO-порт 0.24 TD2 (контрол- лер CAN 2) Зарезервиро- ван Зарезервирован 00 19:18 Р0.25 GPIO-порт 0.25 RD1 (контрол- лер CAN 1) Зарезервиро- ван Зарезервирован 00 21:20 Р0.26 Зарезервирован 00 23:22 Р0.27 GPIO-порт 0.27 AINO (АЦП) Захват 0.1 (TIMER0) Совпадение 0.1 (TIMER0) 00 25:24 Р0.28 GPIO-порт 0.28 AIN1 (АЦП) Захват 0.2 (TIMER0) Совпадение 0.2 (TIMER0) 00 27:26 Р0.29 GPIO-порт 0.29 АШ2(АЦП) Захват 0.3 (TIMER0) Совпадение 0.3 (TIMER0) 00 29:28 РО.ЗО GPIO-порт 0.30 AIN3 (АЦП) EINT3 Захват 0.0 (TIMER0) 00 31:30 Р0.31 Зарезервирован 00 ]) Контроллер CAN 3 доступен только в LPC2294. Для всех других микроконтроллеров соот- ветствующие выводы в данном режиме зарезервированы. Битовая структура регистра PINS ELI для LPC2210/20 приведена в Табл. 8.16. Таблица 8.16. Биты регистра выбора функций выводов 1 для LPC2210/20 (PINSEL1 - 0хЕ002С004) PINSEL1 Название вывода Функция при 00 Функция при 01 Функция при 10 Функция при 11 Значение после сброса 1:0 Р0.16 GPIO-порт 0.16 EINT0 Совпадение 0.2 (TIMER0) Захват 0.2 (TIMER0) 00 3:2 Р0.17 GPIO-порт 0.17 Захват 1.2 (TIMER1) SCK(SPIl) Совпадение 1.2 (TIMER1) 00 5:4 Р0.18 GPIO-порт 0.18 Захват 1.3 (TIMER1) MISO (SPI1) Совпадение 1.3 (TIMER1) 00 7:6 Р0.19 GPIO-порт 0.19 Совпадение 1.2 (TIMER1) MOSI (SPI1) Захват 1.2 (TIMER1) 00 9:8 Р0.20 GPIO-порт 0.20 Совпадение 1.3 (TIMER1) SSEL (SPI1) EINT3 00 11:10 Р0.21 GPIO-порт 0.21 PWM5 Зарезервирован Захват 1.3 (TIMER1) 00 13:12 Р0.22 GPIO-порт 0.22 Зарезервирован Захват 0.0 (TIMER0) Совпадение 0.0 (TIMER0) 00
8.2. Описание регистров 189 Таблица 8.16. Биты регистра выбора функций выводов 1 для LPC2210/20 (PINSEL1 - 0хЕ002С004) (продолжение) PINSEL1 Название вывода Функция при 00 Функция при 01 Функция при 10 Функция при 11 Значение после сброса 15:14 Р0.23 GPIO-порт 0.23 Зарезервирован Зарезервирован Зарезервирован 00 17:16 Р0.24 GPIO-порт 0.24 Зарезервирован Зарезервирован Зарезервирован 00 19:18 Р0.25 GPIO-порт 0.25 Зарезервирован Зарезервирован Зарезервирован 00 21:20 Р0.26 Зарезервирован 00 23:22 Р0.27 GPIO-порт 0.27 AIN0 (АЦП) Захват 0.1 (TIMER0) Совпадение 0.1 (TIMER0) 00 25:24 Р0.28 GPIO-порт 0.28 AIN1 (АЦП) Захват 0.2 (TIMER0) Совпадение 0.2 (TIMER0) 00 27:26 Р0.29 GPIO-порт 0.29 AIN2 (АЦП) Захват 0.3 (TIMER0) Совпадение 0.3 (TIMER0) 00 29:28 РО.ЗО GPIO-порт 0.30 AIN3 (АЦП) EINT3 Захват 0.0 (TIMER0) 00 31:30 Р0.31 Зарезервирован 00 Битовая структура регистра PINSEL1 для LPC2131/32/34/36/38 приведена в Табл. 8.17, Таблица 8.17. Биты регистра выбора функций выводов 1 для LPC2131/32/34/36/38 (PINSEL1 - 0хЕ002С004) PINSEL1 Название вывода Функция при 00 Функция при 01 Функция при 10 Функция при 11 Значение после сброса 1:0 Р0.16 GPIO-порт 0.16 EINT0 Совпадение 0.2 (TIMER0) Захват 0.2 (TIMER0) 00 3:2 Р0.17 GPIO-порт 0.17 Захват 1.2 (TIMER1) SCK (SSP) Совпадение 1.2 (TIMER1) 00 5:4 Р0.18 GPIO-порт 0.18 Захват 1.3 (TIMER1) MISO (SSP) Совпадение 1.3 (TIMER1) 00 7:6 Р0.19 GPIO-порт 0.19 Совпадение 1.2 (TIMER1) MOSI (SSP) Захват 1.2 (TIMER1) 00 9:8 Р0.20 GPIO-порт 0.20 Совпадение 1.3 (TIMER1) SSEL (SSP) EINT3 00 11:10 Р0.21 GPIO-порт 0.21 PWM5 АО1.6(АЦП) (LPC2134/36/38) Захват 1.3 (TIMER1) 00 13:12 Р0.22 GPIO-порт 0.22 АО1.7(АЦП) (LPC2134/36/38) Захват 0.0 (TIMER0) Совпадение 0.0 (TIMER0) 00 15:14 Р0.23 GPIO-порт 0.23 Зарезервирован Зарезервирован Зарезервирован 00 17:16 Р0.24 GPIO-порт 0.24 Зарезервирован Зарезервирован Зарезервирован 00 19:18 Р0.25 GPIO-порт 0.25 AD0.4 (АЦП) Аоит (ВАС) (LPC2132/34/36/38) Зарезервирован 00 21:20 Р0.26 Зарезервирован 00 23:22 Р0.27 GPIO-порт 0.27 AIN0.0 (АЦП) Захват 0.1 (TIMER0) Совпадение 0.1 (TIMER0) 00
190 Глава 8, Блок коммутации выводов Таблица 8.17. Биты регистра выбора функций выводов 1 для LPC2131/32/34/36/38 (PINSEL1 — 0хЕ002С004) (продолжение) PINSEL1 Название вывода Функция при 00 Функция при 01 Функция при 10 Функция при 11 Значение после сброса 25:24 Р0.28 GPIO-порт 0.28 AIN0.1 (АЦП) Захват 0.2 (TIMER0) Совпадение 0.2 (TIMER0) 00 27:26 Р0.29 GPIO-порт 0.29 AIN0.2 (АЦП) Захват 0.3 (TIMER0) Совпадение 0.3 (TIMER0) 00 29:28 РО.ЗО GPIO-порт 0.30 AIN0.3 (АЦП) EINT3 Захват 0.0 (TIMER0) 00 31:30 Р0.31 Зарезервирован 00 Битовая структура регистра PINSEL1 для LPC2141/42/44/46/48 приведена в Табл. 8.18. Таблица 8.18. Биты регистра выбора функций выводов 1 для LPC2141/42/44/46/48 (PINSEL1 - 0хЕ002С004) PINSEL1 Назва- ние вы- вода Функция при 00 Функция при 01 Функция при 10 Функция при 11 Значение после сброса 1:0 Р0.16 GPIO-порт 0.16 EINT0 Совпадение 0.2 (TIMER0) Захват 0.2 (TIMER0) 00 3:2 Р0.17 GPIO-порт 0.17 Захват 1.2 (TIMER1) SCK(SSP) Совпадение 1.2 (TIMER1) 00 5:4 Р0.18 GPIO-порт 0.18 Захват 1.3 (TIMER1) MISO (SSP) Совпадение 1.3 (TIMER1) 00 7:6 Р0.19 GPIO-порт 0.19 Совпадение 1.2 (T1MER1) MOSI (SSP) Захват 1.2 (TIMER1) 00 9:8 Р0.20 GPIO-порт 0.20 Совпадение 1.3 (TIMER1) SSEL (SSP) EINT3 00 11:10 Р0.21 GPIO-порт 0.21 PWM5 AD1.6 (АЦП) (LPC2144/46/48) Захват 1.3 (TIMER1) 00 13:12 Р0.22 GPIO-порт 0.22 AD 1.7 (АЦП) (LPC2144/46/48) Захват 0.0 (TIMER0) Совпадение 0.0 (TIMER0) 00 15:14 Р0.23 GPIO-порт 0.23 Vbus Зарезервирован Зарезервирован 00 17:16 Р0.24 Зарезервирован 00 19:18 Р0.25 GPIO-порт 0.25 AD0.4 (АЦП) Aqut (DAC) (LPC2142/44/46/48) Зарезервирован 00 21:20 Р0.26 Зарезервирован 00 23:22 Р0.27 Зарезервирован 00 25:24 Р0.28 GPIO-порт 0.28 AINO. 1 (АЦП) Захват 0.2 (TIMER0) Совпадение 0.2 (TIMER0) 00 27:26 Р0.29 GPIO-порт 0.29 AIN0.2 (АЦП) Захват 0.3 (TIMER0) Совпадение 0.3 (TIMER0) 00 29:28 РО.ЗО GPIO-порт 0.30 AIN0.3 (АЦП) EINT3 Захват 0.0 (TIMER0) 00 31:30 Р0.31 GPIO-портО.З! UP_LED CONNECT Зарезервирован 00
8.2. Описание регистров 191 Регистр PINSEL1 управляет функциями выводов, согласно перечисленным в Табл. 8.10 параметрам настройки. Направление передачи данных (вход/вы- ход) для каждого из выводов определяется состоянием служебного бита выбора направления в регистре IOODIR (см. Табл. 9.8), но лишь в том случае, когда для вывода назначена функция линии ввода/вывода общего назначения (GPIO). Если вывод выбран для выполнения других функций, то направление передачи данных через него устанавливается автоматически. Регистр выбора функций выводов 2 (PINSEL2 — 0хЕ002С014) Битовая структура регистра PINSEL2 для LPC2114/24/19/29/94 приведена в Табл. 8.19. Таблица 8.19. Биты регистра выбора функций выводов 2 для LPC2114/24/19/29/94 (PINSEL2 - 0хЕ002С014) Номер бита Функция бита Значение после сброса 0, 1 Зарезервированы. 00 2 Когда значение бита равно 0, выводы Р1.36:26 использу- ются как выводы GPIO. Когда значение бита равно 1, вы- воды Р1.31:26 используются как порт отладки P1.26/RTCK, т. е. будет инверсным относительно уровня на данном выводе 3 Когда значение бита равно 0, выводы Р1.25:16 использу- ются как выводы GPIO. Когда значение бита равно 1, вы- воды Р1.25:16 используются как порт трассировки P1.20/TRACESYNC, инверсно относительно уровня на данном выводе 4,5 Зарезервированы. Примечание. Эти биты не должны никогда изменяться. Их изменение может привести к неправильному выпол- нению программы. 11 6...31 Зарезервированы NA Битовая структура регистра PINSEL2 для LPC2210/20/12/14/90/92/94 при- ведена в Табл. 8.20. Таблица 8.20. Биты регистра выбора функций выводов 2 для LPC2210/20/12/14/90/92/94 (PINSEL2 - 0хЕ002С014) Номер бита Функция бита Значение после сброса 0, 1 Зарезервированы 00 2 Когда значение бита равно 0, выводы Р1.36:26 используются как выводы GPIO. Когда значение бита равно 1, выводы Р1.31:26 используются как порт отладки P1.26/RTCK, инверсно относительно уровня на данном выводе 3 Когда значение бита равно 0, выводы Р1.25:16 используются как выводы GPIO. Когда значение бита равно 1, выводы Р1.25:16 используются как порт трассировки P1.20/TRACESYNC, инверсно относительно уровня на данном выводе 5:4 Управляют использованием выводов строба и шины данных: ВООТ1:0 Выводы Р2.7:0 11 = Р2.7:0 Ох или 10 = D7:0 Вывод Р1.0 11 = Р1.0 Ох или 10 = CS0 Вывод Р1.1 11 = Р1.1 Ох или 10 = ОЕ Вывод Р3.31 И = Р3.31 Ох или 10 = BLS0 Выводы Р2.15:8 00 или 11 = Р2.15:8 01 или 10 = D15:8
192 Глава 8. Блок коммутации выводов Таблица 8.20. Биты регистра выбора функций выводов 2 для LPC2210/20/12/14/90/92/94 (PINSEL2 — 0хЕ002С014) (продолжение) Номер бита Функция бита Значение после сброса 5:4 Управляют использованием выводов строба и шины данных: ВООТЕО Вывод РЗ.ЗО 00 или И = РЗ.ЗО 01 или 10 = BLS1 Выводы Р2.27:16 Ох или 11 = Р2.27:16 10 = D27:16 Выводы Р2.29:28 Ох или 11 = Р2.29:28 10 = D29:28 Выводы Р2.31:30 Охили 11 = Р2.31:30 или AIN5:4 10 = D31:30 Выводы Р3.29:28 Ох или 11 = РЗ.29:28 или AIN6:7 10 = BLS2:3 6 Если значение битов 5:4 не равно 10, то этот бит управляет ис- пользованием вывода Р3.29 следующим образом: 0 — разреша- ет Р3.29,1 — разрешает AIN6 1 7 Если значение битов 5:4 неравно 10, то этот бит управляет ис- пользованием вывода Р3.28 следующим образом: 0 — разреша- ет РЗ. 28, 1 — разрешает AIN7 1 8 Управляет использованием вывода Р3.27 следующим образом: 0 — разрешает Р3.27, 1 — разрешает WE 0 10:9 Зарезервированы — 11 Управляет использованием вывода Р3.26 следующим образом: 0 — разрешает Р3.26,1 — разрешает CS1 0 12 Зарезервирован — 13 Если значение битов 25:23 не равно 111, то этот бит управляет использованием вывода P3.23/A23/XCLK следующим образом: 0 — разрешает Р3.23, 1 — разрешает XCLK 0 15:14 Управляют использованием вывода Р3.25 следующим образом: 00 — разрешают Р3.25, 01 — разрешают CS2, 10 и 11 — зарезер- вированные значения 00 17:16 Управляют использованием вывода Р3.24 следующим образом: 00 — разрешают Р3.24, 01 — разрешают CS3, 10 и 11 — зарезер- вированные значения 00 19:18 Зарезервированы — 20 Если значение битов 5:4 не равно 10, то этот бит управляет использованием выводов Р2.29:28 следующим образом: 0 — разрешает Р2.29:28, 1 — зарезервированное значение 0 21 Если значение битов 5:4 не равно 10, то этот бит управляет использованием вцвбда Р2.30 следующим образом: 0 — разре- шает Р2.30, 1 — разрешает AIN4 1 22 Если значение битов 5:4 не равно 10, то этот бит управляет использованием вывода Р2.31 следующим образом: 0 — разре- шает Р2.31, 1 — разрешает AIN5 1 23 Задает, является ли Р3.0/А0 выводом порта (0) или линией адреса (1) 1, если BOOT 1:0 = 00 при RESET = 0, и 0 в ином случае 24 Задает, является ли Р3.1/А1 выводом порта (0) или линией адреса (1) ВООТ1 при сбросе
8.2. Описание регистров 193 Таблица 8.20. Биты регистра выбора функций выводов 2 для LPC2210/20/12/14/90/92/94 (PINSEL2 — 0хЕ002С014) (продолжение) Номер бита Функция бита Значение после сброса 27:25 Задают, какие из выводов из числа P3.23/A23/XCLK и Р3.22:2/А2.22:2, будут являться линиями адреса (линии, не на- значенные адресными, имеют функцию ввода/вывода общего назначения): 000, если ВООТ1:0= 11 при сбросе, Шв ином случае ООО = ни один 100 = Al 1:2 — линии адреса 001 = АЗ:2 — линии адреса 101 = А15:2 — линии адреса 010 = А5:2 — линии адреса 110 = А19:2 — линии адреса 011 = А7:2 — линии адреса 111= А23:2 — линии адреса 31:28 Зарезервированы Битовая структура регистра PINSEL2 для LPC2131/32/34/36/38/41/42/44/46/48 приведена в Табл. 8.21. Таблица 8.21. Биты регистра выбора функций выводов 2 для LPC2131/32/34/36/38/41/42/44/46/48 (PINSEL2 - 0хЕ002С014) Номер бита Функция бита Значение после сброса 1:0 Зарезервированы NA 2 Когда значение бита равно 0, выводы Р1.36:26 используются как выводы GPIO. Когда значение бита равно 1, выводы Р 1.31:26 используются как порт отладки P1.26/RTCK, инверсно отно- сительно уровня на данном выводе 3 Когда значение бита равно 0, выводы Р1.25:16 используются как выводы GPIO. Когда значение бита равно 1, выводы Р1.25:16 используются как порт трассировки P1.20/TRACESYNC, инверсно относительно уровня на данном выводе 4:31 Зарезервированы NA Регистр PINSEL2 управляет функциями выводов согласно параметрам на- стройки, перечисленным в Табл. 8.19...Табл. 8.21. Направление передачи дан- ных (вход/выход) для каждого из выводов определяется состоянием служебного бита выбора направления в регистре IOODIR (см. Табл. 9.8), но лишь в том слу- чае, когда для вывода назначена функция линии ввода/вывода общего назначе- ния (GPIO). Если вывод выбран для выполнения других функций, то направле- ние передачи данных через него устанавливается автоматически. Предупреждение. При доступе к регистру PINSEL2 во время проведения операции «чте- ние-модификация-загтись», случайная запись 0 в бит 2 и/или бит 3 приведет к потере и/или возобновлению функции трассировки! Изменение значения бита 4 или бита 5 с 1 на 0 для микроконтроллеров LPC2114/24/19/29/94 может вызвать неправильное выполнение про- граммы. 304
194 Глава 8. Блок коммутации выводов 8.3. Значения регистров выбора функций выводов Регистры PINSEL управляют функциями выводов микроконтроллера, как показано в Табл. 8.10. Пары битов в этих регистрах сопоставляются определенному выводу микро- контроллера. При этом, состояние служебного бита направления передачи данных (вход/выход) в регистре IOODIR/IO1DIR имеет значение только в том случае, ког- да для данного вывода выбрана функция GPIO. В случае выбора для данного выво- да иных функций, направление задается автоматически. Каждое пользовательское приложение, как правило, имеет собственные задачи и поэтому использует для каждого конкретного вывода различный набор возможных функций. 8.4. Управление загрузкой в микроконтроллерах с контроллером внешней памяти В микроконтроллерах в 144-выводном корпусе, имеющих контроллер вне- шней памяти, управление загрузкой и начальными операциями микроконтрол- лера осуществляется в зависимости от состояния выводов BOOT 1:0 при нали- чии входного НИЗКОГО уровня на выводе RESET. Встроенные резисторы, «подтягивающие» вывод BOOT к «плюсу» питания, обеспечивают на нем на- пряжение ВЫСОКОГО уровня в случае, когда входной сигнал на этот вывод не поступает (вывод не подключен). Подключив между этими выводами и общим проводом высокоомные резисторы (номиналом порядка 10 кОм) или транзис- торные ключи, можно выбрать один из указанных в Табл. 8.22 вариантов загруз- ки (на вывод RESET должен быть подан внешний НИЗКИЙ уровень). Обратите внимание, что, если в приложении разрешен сторожевой таймер, но сброс от сторожевого таймера не осуществляется, то не разрешается исполь- зовать внешний транзистор для того, чтобы задавать уровень напряжения на выводе RESET. Таблица 8.22. Управление загрузкой с помощью выводов ВООТ1:0 ВООТ1 (текущий уровень на выводе P2.27/D27 «защелкивается» по фронту сигнала сброса на выводе RESET) воото (текущий уровень на выводе P2.26/D26 «защелкивается» по фронту сигнала сброса на выводе RESET) Загрузка от 0 0 Устройства 8-битной памяти на выводе CS0 0 1 Устройства 16-битной памя- ти на выводе CS0 1 0 Устройства 32-битной памя- ти на выводе CS0 1 1 Встроенной Flash-памяти (в случае ее отсутствия — за- грузка от устройства 16-бит- ной памяти на выводе CS0)
ГЛАВА 9 ЛИНИИ ВВОДА/ВЫВОДА ОБЩЕГО НАЗНАЧЕНИЯ (GPIO) Для линий ввода/вывода общего назначения (GPIO) микроконтроллеров семейства LPC2000 характерны следующие особенности: • управление направлением (вход это или выход) каждой линии индивиду- ально; • раздельное управление установкой и сбросом выходного уровня линии; • все линии по умолчанию после сброса являются линиями GPIO, настро- енными как входы. Линии GPIO могут использоваться для следующих приложений: • ввод/вывод общего назначения; • управление светодиодами, или другими индикаторами; • управление внешними устройствами, подключенными к микроконтрол- леру; • опрос цифровых входов. Описание выводов GPIO микроконтроллеров LPC2101/02/03/04/05/06 при- ведено в Табл. 9.1. Таблица 9.1. Описание выводов GPIO микроконтроллеров LPC2101/01/03/04/05/06 Название вывода Тйп Описание Р0.0...Р0.31 I/O Вход-выход общего назначения. Количество фактически до- ступных линий GPIO зависит от использования в приложении дополнительных функций Описание выводов GPIO микроконтроллеров LPC2119/29/14/24/94 и LPC2292/90/12/14/94/10/20 приведено в Табл. 9.2. Таблица 9.2. Описание выводов GPIO для микроконтроллеров LPC2119/29/14/24/94 и LPC2292/90/12/14/94/10/20 Название вывода Тйп Описание Р0.0...Р0.31 . Р1.16...Р1.3.Г I/O Вход-выход общего назначения. Количество фактически до- ступных линий GPIO зависит от использования в приложении дополнительных функций Р2.0...Р2.31 Р3.0...Р3.31 I/O Линии внешних шин данных/адреса, доступные в качестве ли- ний GPIO, а также используемые для цифровых и аналоговых функций. Количество фактически доступных линий GPIO/ли- ний цифровых и аналоговых функций зависит от выбранной структуры шины. PORT2 и PORT3 доступны только в микро- контроллерах в 144-выводном корпусе Описание выводов GPIO микроконтроллеров LPC2131/32/34/36/38/41/42 / 44/46/48 приведено в Табл. 9.3.
196 Глава 9. Линии ввода/вывода общего назначения (GPIO) Таблица 9.3. Описание выводов GPIO для микроконтроллеров LPC2131/32/34/36/38/41/42/44/46/48 Название вывода Ъш Описание Р0.0...Р0.31 Р1.16...Р1.31 I/O Вход-выход общего назначения. Количество фактически до- ступных линий GPIO зависит от использования в приложении дополнительных функций 9.1. Описание регистров GPIO Микроконтроллеры LPC2000 в 48-выводном корпусе имеют один 32-бит- ный порт ввода/вывода общего назначения (PORTO) с 32 доступными линиями GPIO, микроконтроллеры LPC2000 в 64-выводном корпусе имеют два 32-бит- ных порта ввода/вывода общего назначения (PORTO и PORT1). В качестве ли- ний GPIO PORTO доступны 30 из 32 выводов PORTO. PORT1 имеет до 16 выво- дов, доступных как линии GPIO. PORTO и PORT1 управляются с помощью двух групп по 4 регистра в каждой, как показано в Табл. 9.4. Микроконтроллеры в 144-выводном корпусе имеют, кроме того, два 32-битных дополнительных пор- та (PORT2 и PORT3), которые могут быть сконфигурированы, чтобы использо- ваться как шина данных и шина адреса внешней памяти или как линии GPIO, а также для выполнения дополнительных цифровых и аналоговых функций. Подробнее об использовании PORT2 и PORT3 см. в главе 7 «Цоколевка и на- значение выводов» и главе 8 «Блок коммутации выводов». Таблица 9.4. Карта регистров GPIO Типовое название Описание Доступ Значение после сброса Адрес и название PORTO PORT1 PORT2 PORT3 IOPIN Регистр значений вы- водов порта GPIO. Отображает текущие состояния выводов, сконфигурирован- ных как линии GPIO, независимо от задан- ного для этих выво- дов направления и ре- жима работы. Этот регистр не отра- жает состояния вы- вода, если он скон- фигурирован не как линия GPIO RO NA 0хЕ0028000 IO0PIN 0хЕ0028010 IO1PIN 0хЕ0028020 IO2PIN 0хЕ0028030 IO3PIN IOSET Регистр установки выходов порта GPIO. Совместно с регист- ром IOCLR, управля- ет выходным состоя- нием выводов. Чтобы установить те или иные выводы порта, следует записать ло- гическую 1 в соот- ветствующие биты этого регистра. За- пись 0 не производит какого-либо эффекта R/W 0x00000000 0хЕ0028004 IO0SET 0хЕ0028014 IO1SET 0хЕ0028024 IO2SET 0хЕ0028034 IO3SET
9.1. Описание регистров GPIO 197 Таблица 9.4. Карта регистров GPIO (продолжение) Типовое название Описание Доступ Значение после сброса Адрес и название PORTO PORT1 PORT2 PORT3 IODIR Регистр управления направлением порта GPIO. Задает на- правление для каж- дого из выводов пор- та по отдельности R/W 0x00000000 0хЕ0028008 IO0DIR 0хЕ0028018 IO1DIR 0хЕ0028028 IO2DIR 0хЕ0028038 IO3DIR IOCLR Регистр сброса выхо- дов порта GPIO. Уп- равляет выходным состоянием выводов. Запись логической 1 в биты этого регистра вызывает сброс соот- ветствующих выво- дов порта и обнуляет (сбрасывает) соот- ветствующие биты в регистре IOSET. За- пись нулей не произ- водит какого-либо эффекта WO 0x00000000 0хЕ002800С IO0CLR 0хЕ002801С IO1CLR 0хЕ002802С IO2CLR 0хЕ002803С IO3CLR Регистр значений выводов порта GPIO (IOOPIN — 0хЕ0028000, 101 PIN - 0хЕ0028010, IO2PIN - 0хЕ0028020, IO3PIN - 0хЕ0028030) Битовая структура регистров IOPIN приведена в Табл. 9.5. Этот регистр предназначен для отображения текущих состояний линий GPIO. Значение регистра отображает любые изменения внешних сигналов, но только на тех выводах микроконтроллера, которые были сконфигурированы как линии GPIO. Для выводов портов, сконфигурированных не как линии GPIO (а, к примеру, для выполнения иных функций), контроль с использова- нием регистра IOPIN не даст достоверного результата. Выбор для подключения к выводу порта какой-то одной функции полно- стью исключает все другие функции, которые могут быть доступны на том же самом выводе. Частичное исключение из этого правила имеет место лишь для входов АЦП. Вне зависимости от функции, которая выбрана для вывода порта, к которому подключен вход АЦП, этот вход АЦП в любой момент может быть прочитан микроконтроллером, и изменение входного напряжения на нем будет отражено в результате аналого-цифрового преобразования. Однако корректное чтение результата АЦП может быть произведено лишь в случае, когда для дан- ного вывода выбрана аналоговая функция (при этом будет активизирована со- ответствующая схема интерфейса между выводом и модулем АЦП). Во всех других случаях, подключение к данному выводу необходимых для активизации какой-то иной функции цифровых логических схем приведет к некорректному проведению аналого-цифрового преобразования. Таблица 9.5. Биты регистр значений выводов порта GPIO (IOOPIN — 0хЕ0028000, IO1PIN - 0хЕ0028010, IO2PIN - 0хЕ0028020, IO3PIN - 0хЕ0028030) Номер бита Функция бита Значение после сброса 31:0 Биты значения выводов GPIO. Бит 0 в регистре IOOPIN соответствует выводу Р0.0, бит 1 — выводу Р0.1,..., бит 31 — Р0.31 Неопределенное
198 Глава 9, Линии ввода/вывода общего назначения (GPIO) Регистр установки выходов порта GPIO (IOOSET — 0хЕ0028004, 101 SET-0хЕ0028014,I02SET-0хЕ0028024,I03SET-0хЕ0028034) Битовая структура регистров IOOSET приведена в Табл. 9.6. Этот регистр используется, чтобы установить выводы порта, если они скон- фигурированы как линии GPIO и для них задан режим выходов. Запись в тот или иной бит регистра IOSET логической 1 вызывает установку соответствую- щего выхода порта. Запись 0 не будет иметь никакого эффекта. Если какой-то вывод сконфигурирован как вход или для него выбрана альтернативная функ- ция, то изменение состояния соответствующего ему бита в регистре IOSET не будет иметь эффекта. Чтение регистра IOSET возвращает значение этого регистра, которое опре- делено предыдущей записью в IOSET и IOCLR (или IOPIN, как отмечено вы- ше). Это значение не отражает эффект влияния внешних сигналов на линию ввода/вывода. Таблица 9.6. Биты регистра установки выходов порта GPIO (IOOSET — 0хЕ0028004, IO1SET - 0хЕ0028014, IO2SET - 0хЕ0028024, IO3SET - 0хЕ0028034) Номер бита Функция бита Значение после сброса 31:0 Биты установки выходов. Бит 0 регистра IOOSET соответствует выводу Р0.0, бит 1 — выводу РОЛ,бит 31 — выводу Р0.31 0 Регистр сброса выходов порта GPIO (IOOCLR — 0хЕ002800С, 101CLR - 0хЕ002801С, IO2CLR - 0хЕ002802С, IO3CLR - 0хЕ002803С) Битовая структура регистров IOCLR приведена в Табл. 9.7. Этот регистр используется, чтобы сбросить выводы порта, если они скон- фигурированы как линии GPIO и для них задан режим выходов. Запись в тот или иной бит регистра IOCLR логической 1 вызывает сброс соответствующего выхода порта и сбрасывает соответствующий бит в регистре IOSET. Запись 0 не будет иметь никакого эффекта. Если какой-то вывод сконфигурирован как вход или для него выбрана альтернативная функция, то изменение состояния соот- ветствующего ему бита в регистре IOCLR не будет иметь эффекта. Таблица 9.7. Биты регистра сброса выходов порта GPIO (IOOCLR — 0хЕ002800С, IO1CLR - 0хЕ002801С, IO2CLR - 0хЕ002802С, IO3CLR - 0хЕ002803С) Номер бита Функция бита Значение после сброса 31:0 Биты сброса выходов. Бит 0 регистра IOOCLR соответствует выводу Р0.0, бит 1 — выводу РОЛ,..., бит 31 — выводу Р0.31 0 Регистр направления порта GPIO (IOODIR — 0хЕ0028008,101DIR — 0хЕ0028018, IO2DIR - 0хЕ0028028, IO3DIR - 0хЕ0028038) Битовая структура регистров IODIR приведена в Табл. 9.8. Этот регистр используется, чтобы управлять направлением выводов, когда они сконфигурированы как линии GPIO. Значение бита направления для того или иного вывода задает направление передачи данных через этот вывод.
9.2. Рекомендации по использованию GPIO 199 Таблица 9.8. Регистр направления порта GPIO (IOODIR — 0хЕ0028008, IO1DIR - 0хЕ0028018, IO2DIR - 0хЕ0028028, IO3DIR - 0хЕ0028038) Номер бита Функция бита Значение после сброса 31:0 Служебные биты направления (0 = вход, 1 = выход). Бит 0 регистра IOODIR управляет выводом Р0.0, бит 1 — выводом Р0.1,..., бит 31 — выводом РО.З 1 0 9.2. Рекомендации по использованию GPIO Если для некоторого вывода соответствующий бит установлен как в регист- ре установки выходов порта GPIO (lOnSET), так и в регистре сброса выходов порта GPIO (lOnCLR), то логический уровень на этом выводе будет опреде- ляться последней по времени записью в регистры lOnSET и lOnCLR. Это озна- чает, что в случае выполнения последовательности команд: IOOSET = 0x00000080 IO0CLR = 0x00000080 на выходе Р0.7 после записи в регистр IOOSET появится ВЫСОКИЙ уровень, а после записи в регистр IO0CLR — НИЗКИЙ уровень. Приложения, которые требуют одновременного сброса всех линий парал- лельного порта, могут использовать прямой доступ к соответствующему регист- ру значений выводов порта GPIO (IOPIN). В предположении, что выводы Р0.8 и Р0.15 сконфигурированы как выходы, запись в регистр IO0PIN: IO0PIN = 0x00000700 произведет тот же самый эффект, что и последовательность команд: IOOSET = 0x00000700 IO0CLR = 0x00003800 Как можно видеть, вариант с записью в регистры IOOSET и IO0CLR будет выполняться дольше, по сравнению с единственной командой записи в регистр IO0PIN.
ГЛАВА 10 УНИВЕРСАЛЬНЫЙ АСИНХРОННЫЙ ПРИЕМОПЕРЕДАТЧИК UART0 Универсальный асинхронный приемопередатчик микроконтроллеров се- мейства LPC2000 UART0 имеет следующие характеристики: • 16-байтовые приемный и передающий буфера FIFO; • размещение регистров соответствует промышленному стандарту ‘550; • приемный буфер FIFO «защелкивает» 1, 4, 8 и 14 байт; • встроенный генератор задания скорости обмена с периферийными уст- ройствами. Обслуживающие UART0 выводы микроконтроллера перечислены в Табл. ЮЛ. Таблица 10.1. Описание выводов UART0 Название вывода Тйп Описание RxDO I Последовательный вход. Принимает последовательные данные TxDO О Последовательный выход. Передает последовательные данные 10.1. Описание регистров UART0 Логическая схема обслуживания UART0 состоит из десяти 8-битных регист- ров, перечисленных в Табл. 10.2. Старший бит регистра U1LCR представляет собой служебный бит доступа к значению делителя (DLAB) и используется для разрешения или запрещения доступа к регистрам, в которых хранится значение коэффициента деления программируемого делителя UART0 (подробнее об этом см. далее в этой главе). Регистр буфера приема UART0 (U0RBR — ОхЕОООСООО, когда DLAB = 0, доступен только для чтения) Регистр U0RBR используется как старший байт приемного буфера FIFO UART0. Старший байт приемного буфера FIFO содержит самый «старый» (пер- вый поступивший в приёмный буфер FIFO) принятый символ и может быть прочитан через шинный интерфейс. LSB (младший значащий бит — бит 0) U0RBR представляет собой самый «старый» принятый информационный бит. Если принятый символ кодируется менее чем восемью битами, неиспользован- ные MSB (старшие значащие биты) U0RBR заполняются нулями.
Таблица 10.2. Регистровая карта UART0 Название Описание Бит 7 Бит 6 Бит 5 Бит 4 БитЗ Бит 2 Бит 1 БитО Доступ Знач. после сброса1) Адрес U0RBR Регистр буфера приема (MSB) Данные чтения (LSB) RO Неопреде- ленное ОхЕОООСООО DLAB = 0 U0THR Регистр буфера, (холдинга) пере дачи (MSB) Данные записи (LSB) WO NA ОхЕОООСООО DLAB = 0 U0IER Регистр разре- шения прерыва- ний 0 0 0 0 0 Разрешение прерывания по состоя- нию линии Rx Разреше- ние преры- вания THRE Разрешение прерывания при доступе к принятым данным R/W 0 0хЕ000С004 DLAB = 0 U0IIR Регистр иденти- фикации преры- вания Разрешение буферов FIFO 0 0 IIR3 IIR2 IIR1 IIR0 RO 0x01 0хЕ000С008 U0FCR Регистр управле- ния буфером FIFO Триггер (защелка) Rx Зарезервировано — Сброс пере- дающего бу- фера FIFO Сброс при- емного бу- фера FIFO Разрешение FIFO WO 0 0хЕ000С008 U0LCR Регистр управле- ния линией DLAB Установ- ка стопо- вого бита Бит чет- ности Выбор типа чет- ности Разреше- ние чет- ности Количество стоповых битов Выбор длины слова R/W 0 0хЕ000С00С U0LSR Регистр состоя- ния линии Ошибка приемно- го буфера FIFO ТЕМТ THRE BI FE РЕ ОЕ DR RO 0x60 0хЕ000С014 U0SCR Рабочий регистр клавиатуры (MSB) (LSB) R/W 0 0хЕ000С01С U0DLL Регистр, содер- жащий младший байт коэффици- ента деления (MSB) (LSB) R/W 0x01 ОхЕОООСООО DLAB= 1 U0DLM Регистр, содер- жащий старший байт коэффици- ента деления (MSB) (LSB) R/W 0 0хЕ000С004 DLAB= 1 ° Значение относится к данным, содержащимся только в используемых битах, и не включает содержимое зарезервированных битов. 10.1. Описание регистров UART0
202 Глава 10. Универсальный асинхронный приемопередатчик UART0 Чтобы обратиться к регистру U0RBR, необходимо сбросить бит доступа к значению делителя (DLAB) в регистре U0LCR. Регистр U0RBR доступен толь- ко для чтения. Битовая структура регистра U0RBR приведена в Табл. 10.3. Таблица 10.3. Биты регистра приемного буфера UARTO (U0RBR — ОхЕОООСООО, когда DLAB = 0, доступен только для чтения) U0RBR Функция Описание Значение после сброса 7:0 Регистр буфера приема Регистр буфера приема UART0 содержит самый «старый» байт, принятый в приемный буфер FIFO UARTO Неопреде- ленное Регистр буфера передачи UARTO (U0THR — ОхЕОООСООО, когда DLAB = О, доступен только для записи) Регистр U0THR используется как старший байт передающего буфера FIFO UARTO. Старший байт передающего буфера FIFO содержит самый «новый» (последний поступивший в передающий буфер FIFO) символ и может быть за- писан через шинный интерфейс. Младший бит регистра передается через UARTO первым. Чтобы обратиться к регистру U0THR, необходимо сбросить бит доступа к значению делителя (DLAB) в регистре U0LCR. Регистр U0THR доступен толь- ко для записи. Битовая структура регистра U0THR приведена в Табл. 10.4. Таблица 10.4. Биты регистра передающего буфера UARTO (U0THR — ОхЕОООСООО, когда DLAB = 0, доступен только для записи) U0THR Функция Описание Значение после сброса 7:0 Регистр буфера передачи Запись в регистр буфера передачи UART0 вызывает сохранение записанного байта в передающем буфере FIFO UARTO. Байт бу- дет передан через UART0, когда он достигнет «дна» передающе- го буфера FIFO (т. е. окажется первым в очереди на передачу) и когда передатчик станет доступен (свободен) NA Регистр, содержащий LSB делителя UARTO (UODLL — ОхЕОООСООО, когда DLAB =1) Регистр, содержащий MSB делителя UARTO (U0DLM - 0хЕ000С004, когда DLAB =1) Программируемый 16-битный делитель UART0 входит в состав встроенного генератора задания скорости обмена через UART0. В регистрах U0DLL (млад- шие 8 битов) и U0DLM (старшие 8 битов) содержится значение коэффициента, на который следует делить тактовую частоту VPB (pclk), чтобы в результате по- лучить на выходе UART0 синхросигнал, частота которого ровно в 16 раз превы- шает требуемую скорость обмена с периферийными устройствами. Значение коэффициента деления, равное 0000h, воспринимается логикой UART0 как значение 000lh, чтобы не допустить деления на нуль. Для обращения к регист- рам U0DLL и U0DLM, следует установить в регистре U0LCR бит доступа к зна- чению делителя (DLAB). Битовая структура регистра U0DLL приведена в Табл. 10.5, a U0DLM — в Табл. 10.6.
10.1. Описание регистров UARTO 203 Таблица 10.5. Регистр, содержащий LSB делителя UARTO (U0DLL — ОхЕОООСООО, когда DLAB = 1) U0DLL Функция Описание Значение после сброса 7:0 Регистр, содержа- щий LSB делителя Регистр, содержащий младший байт делителя, сов- местно с регистром U0DLM задает скорость обмена через UART0 0x01 Таблица 10.6. Регистр, содержащий MSB делителя UARTO (U0DLM — 0хЕ000С004, когда DLAB = 1) U0DLM Функция Описание Значение после сброса 7:0 Регистр, содержа- щий MSB делителя Регистр, содержащий старший байт делителя, совместно с регистром U0DLL задает скорость обмена через UART0 0 Регистр разрешения прерываний UARTO (UOIER — 0хЕ000С004 когда DLAB = О) Регистр U0IER используется, чтобы разрешать прерывания от четырех ис- точников UARTO. Битовая структура регистра U0IER приведена в Табл. 10.7. Таблица 10.7. Регистр разрешения прерываний UARTO (UOIER — 0хЕ000С004, когда DLAB = 0) U0IER Функция Описание Значение после сброса 0 Разрешение пре- рывания RBR 0: Запретить прерывание RDA. 1: Разрешить прерыванию RDA. Бит U0IER[0] разрешает прерывание при доступности принятых данных RDA (Receive Data Available) для UARTO. Он также управляет прерыванием от тайм-аута при приеме символа CRT (Character Receive Time-out) 0 1 Разрешение пре- рывания THRE 0: Запретить прерывание THRE. 1: Разрешить прерыванию THRE. Бит U0IER[l] разрешает прерывание THRE для UART0. Текущее состояние этого прерывания отображается в зна- чении бита U0LSR[5] 0 2 Разрешение пре- рывания по со- стоянию линии Rx 0: Запретить прерывания по состоянию линии Rx. 1: разрешить прерывания по состоянию линии Rx. Бит U0IER[2] разрешает прерывания по состоянию ли- нии Rx UARTO. Текущее состояние этих прерываний отображается в значении битов U0LSR [4:1] 0 7:3 Зарезервированы Пользовательское программное обеспечение не должно про- изводить запись в зарезервированные биты. Чтение зарезер- вированного бита возвращает неопределенное значение NA Регистр идентификации прерывания UARTO (UOIIR — 0хЕ000С008, доступен только для чтения) Регистр U0IIR содержит код текущего состояния, который отображает при- оритет и источник отложенного прерывания. Во время осуществления доступа к регистру U0IIR его содержимое не меняется. Если прерывание происходит во время доступа к U0IIR, то состояние этого прерывания будет отображено при следующем доступе к U0IIR. Прерывания обрабатываются так, как это описано в Табл. 10.8. Считывая значения битов U0IIR[3:0], подпрограмма обработки прерывания может определить причину прерывания и способ сброса активного прерывания. Аппаратный сброс прерывания производится, только если оно идентифицируется как прерывание типа THRE.
204 Глава 10. Универсальный асинхронный приемопередатчик UARTO Таблица 10.8. Регистр идентификации прерываний UARTO (UOIIR — 0хЕ000С008, доступен только для чтения) U0IIR Функция Описание Значение после сброса 0 Отложен- ное преры- вание 0: Как минимум, одно прерывание является отложенным. 1: Нет отложенных прерываний. Обратите внимание, что бит U0IIR[0] имеет НИЗКИЙ актив- ный уровень. Отложенное прерывание может быть идентифи- цировано путем анализа битов U0IER[3:1 ] 1 3:1 Идентифи- кация пре- рывания 011: Состояние линии приема (RLS). 010: Доступны принятые данные (RDA). 110: Тайм-аут индикации принятого символа (CTI). 001: Прерывание THRE. Бит U0IER[3] идентифицирует прерывание от приемного буфе- ра FIFO UARTO. Все другие комбинации битов U0IER[3:l], кроме вышеуказанных, являются зарезервированными (000, 100, 101,111) 0 5:4 Зарезерви- рованы Пользовательское программное обеспечение не должно произ- водить запись в зарезервированные биты. Чтение зарезервиро- ванного бита возвращает неопределенное значение NA 7:6 Разреше- ние FIFO Эти биты эквивалентны биту U0FCR[0] 0 Обработка прерываний иллюстрируется в Табл. 10.9. Таблица 10.9. Обработка прерываний UARTO U0IIR [3:0] Приоритет Тйп прерывания Источник прерывания Метод сброса прерывания 0001 — Нет Нет — оно Наивысший Состояние линии Rx/ошибка ОЕ, или РЕ, или FE, или BI Чтение U0LSR 0100 Вторичное Принятые данные до- ступны Принятые данные доступны или достигнут уровень срабатывания триггера-защелки в приемном буфере FIFO (U0FCR0 = 1) Чтение U0RBR или снижение уровня срабатывания триг- гера-защелки при- емного буфера FIFO UARTO 1100 Вторичное Индика- ция тайм- аута симво- ла В приемном буфере FIFO находится, как ми- нимум, один символ, при этом в течение не- которого периода времени не производится операций ввода или удаления символов в бу- фере FIFO. Длительность этого периода вре- мени зависит от того, сколько символов на- ходится в буфере FIFO и какой установлен уровень срабатывания триггера-защелки (от 3.5 до 4.5 периодов длительности символа). Точное время определяется как: .[(длина слова) х 7 - 2] х 8 + [(уровень триггера — количество символов) х 8 + 1] х RCLK Чтение U0RBR 0010 Третичное THRE THRE Чтение U0IIR (ес- ли он — источник прерывания) или запись в U0THR Примечание. Значения 0000, ООП, 0101, 0111, 1000, 1001, 1010, 1011, 1101, 1110, 1111 зарезер- вированы.
10.1. Описание регистров UARTO 205 RLS-прерывание UARTO (U0IIR[3:1] = ОН) является прерыванием с самым высоким приоритетом и генерируется всякий раз, когда на входе Rx UARTO имеет место одно из четырех условий (состояний) ошибки: ошибка переполне- ния (ОЕ), ошибка четности (РЕ), ошибка кадровой синхронизации (FE) и пре- рывание останова (BI). Состояния ошибки приема UARTO, которые устанавли- вают прерывание, отображаются в значениях битов U0LSR[4:l]. Прерывание сбрасывается после чтения U0LSR. RDA-прерывание UARTO (U0IIR[3:l] = 010), как и СП-прерывание (U0IIR[3:1] = ПО), имеет второй уровень приоритета. Прерывание RDA акти- визируется, когда приемный буфер FIFO UARTO заполняется до уровня сраба- тывания триггера-защелки, определенного битами U0FCR[7:6], и сбрасывает- ся, когда приемный буфер FIFO UARTO освобождается ниже уровня срабатыва- ния триггера-защелки. Когда прерывание RDA активно, центральный процессор может читать блок данных, размер которого определен уровнем сра- батывания триггера-защелки. CTI-прерывание (U0IIR[3:l] = ПО) имеет второй уровень приоритета и ге- нерируется, когда приемный буфер FIFO UARTO содержит не менее одного сим- вола и не пополняется и/или не освобождается в течении времени, равного от 3.5 до 4.5 периодов длительности символа. Любая активность приемного буфера FIFO UARTO (чтение или запись сдвигового регистра приема UORSR UARTO) сбросит прерывание. Это прерывание предназначено, чтобы сохранить U0RBR после того, как символьное сообщение (последовательность символов) было по- лучено, а установленный уровень срабатывания триггера (защелки) еще не до- стигнут. Например, если периферийное устройство хочет послать 105 символов, и уровень срабатывания триггера (защелки) установлен равным 10 символов, центральный процессор получил бы 10 прерываний RDA, приводящих к пере- мещению 100 символов и от 1 до 5 прерываний CTI (в зависимости от сервисной подпрограммы), приводящих к перемещению (сохранению) 5 символов. THRE-прерывание UARTO (U0IIR[3:l] = 001) имеет третий уровень при- оритета и активизируется, когда передающий буфер FIFO UARTO пуст при вы- полнении некоторых условий инициализации. Эти условия инициализации предназначены для того, чтобы дать передающему буферу FIFO UARTO воз- можность заполняться данными и не генерировать прерывания THRE при сис- темном запуске после включения питания. Условия инициализации заключа- ются в осуществлении одной символьной задержки минус столовый бит всякий раз, когда THRE = 1 и с момента его установки поступило не менее двух симво- лов в регистр U0THR. Эта задержка рассчитана на то, чтобы дать процессору время для записи данных в регистр U0THR без возникновения необходимости декодировать и обслуживать прерывание THRE. Прерывание THRE устанавли- вается немедленно, если в передающем буфере FIFO UARTO находятся два или более символа и регистр U0THR пуст. Прерывание THRE сбрасывается, когда производится запись в U0THR или чтение U0IIR. Регистр управления буфером FIFO UARTO (UOFCR — ОхЕОООСООв) Регистр U0FCR управляет операциями, связанными с приемным и переда- ющим буферами FIFO UARTO. Битовая структура регистра U0FCR приведена в Тябл. 10.10.
206 Глава 10. Универсальный асинхронный приемопередатчик UARTO Таблица 10.10. Биты регистра управления буфером FIFO UARTO (UOFCR — 0хЕ000С008) UOFCR Функция Описание Значение после сброса 0 Разрешение буфера FIFO Активный ВЫСОКИЙ уровень разрешает приемный и переда- ющий буфера FIFO UARTO с доступом, заданным битами U0FCR[7:l]. Этот бит должен быть установлен для корректного проведения операций UARTO. Любое изменение этого бита приведет к автоматическому сбросу содержимого приемного и передающего буферов FIFO UARTO 0 1 Сброс прием- ного буфера FIFO Запись логической 1 в бит U0FCR[l] очистит все байты в при- емном буфере FIFO UARTO и сбросит логическую схему указа- теля, после чего производится автоматический аппаратный сброс самого этого бита 0 2 Сброс переда- ющего буфера FIFO Запись логической 1 в бит U0FCR[2] очистит все байты в пере- дающем буфере FIFO UARTO и сбросит логическую схему ука- зателя, после чего производится автоматический аппаратный сброс самого этого бита 0 5:3 Зарезервиро- ваны Пользовательское программное обеспечение не должно произ- водить запись в зарезервированные биты. Чтение зарезервиро- ванного бита возвращает неопределенное значение NA 7:6 Выбор уровня срабатывания триггера (за- щелки) прием- ного буфера FIFO 00: уровень триггера 0 (по умолчанию 1 символ или 0x01). 01: уровень триггера 1 (по умолчанию 4 символа или 0x04). 10: уровень триггера 2 (по умолчанию 8 символов или 0x08). 11: уровень триггера 3 (по умолчанию 14 символов или ОхОЕ). Эти два бита определяют, сколько символов будет записано в при- емный буфер FIFO UARTO прежде, чем будет активизировано прерывание. Пользователь может задать один из четырех уровней срабатывания триггера, чтобы настроить приемный буфер FIFO UARTO для обмена с конкретным внешним устройством 0 Регистр управления линией UARTO (UOLCR — ОхЕОООСООС) Регистр U0LCR определяет формат символов данных, который должен быть передан или получен через UARTO. Битовая структура регистра U0LCR приведена в Табл. 10.11. Таблица 10.11. Регистр управления линией UARTO (UOLCR — ОхЕОООСООС) U0LCR Функция Описание Значение после сброса 1:0 Выбор длины слова (симво- ла) 00: Длина символа — 5 битов 01: Длина символа — 6 битов 10: Длина символа — 7 битов 11: Длина символа — 8 битов 0 2 Выбор коли- чества стопо- вых битов 0:1 столовый бит 1: 2 стоповых бита (1.5, если U0LCR [1:0] = 00) 0 3 Разрешение контроля чет- ности 0: Отключение генерации контроля четности и его проверки. 1: Разрешение генерации контроля четности и его проверки 0 5:4 Выбор режима контроля чет- ности 00: Проверка на нечетность 01; Проверка на четность' 10: Устанавливается логическая 1 в бите четности. 11: Устанавливается логический 0 в бите четности 0 6 Контроль оста- нова 0: Запретить передачу останова. 1: Разрешить передачу останова. Вывод UARTO TxD сбрасывается в логический 0, когда бит U0LCR[6] имеет активный ВЫСОКИЙ уровень 0 7 Бит доступа к значению де- лителя 0: Запретить доступ к значению коэффициента деления делителя. 1: Разрешить доступ к значению коэффициента деления делителя 0
10.1. Описание регистров UARTO 207 Регистр состояния линии UARTO (UOLSR — 0хЕ000С0149 доступен только для чтения) Регистр U0LSR, доступный только для чтения, содержит информацию о со- стоянии принимаемых и передаваемых через UARTO блоков данных. Битовая структура регистра U0LSR приведена в Табл. 10.12. Таблица 10.12. Биты регистра состояния линии UARTO (UOLSR — 0хЕ000С014, доступен только для чтения) U0LCR Функция ' Описание Значение после сброса 0 Данные при- емника гото- вы (RDR) 0: U0RBR пуст. 1: U0RBR содержит достоверные данные. Бит U0LSR[0] устанавливается, когда U0RBR содержит непро- читанный символ и сбрасывается, когда приемный буфер FIFO UARTO пуст 0 1 Ошибка пе- реполнения (ОЕ) 0: Состояние ошибки переполнения неактивно. 1: Состояние ошибки переполнения активно. Состояние ошибки переполнения устанавливается, как только происходит переполнение. Чтение регистра UOLSR сбрасывает бит U0LSR[ 1 ]. Бит UOLSRfl] устанавливается, когда в приемник UORSR UARTO поступил новый символ, а приемный буфер FIFO UORBR UARTO полон. В этом случае в приемный буфер FIFO UORBR UARTO не будет записан новый символ поверх старых и поступивший в приемник U0RSR новый символ будет потерян 0 2 Ошибка чет- ности (РЕ) 0: Состояние ошибки четности неактивно. 1: Состояние ошибки четности активно. Когда бит четности полученного символа находится в непра- вильном состоянии, происходит ошибка четности. Чтение регис- тра U0LSR сбрасывает бит U0LSR[2]. Время обнаружения ошиб- ки четности зависит от состояния бита UOFCRfO]. Ошибка четности связана с символом, читаемым из приемного буфера FIFO UORBR UARTO 0 3 Ошибка кад- ровой синх- ронизации (FE) 0: Состояние ошибки кадровой синхронизации неактивно. 1: Состояние ошибки кадровой синхронизации активно. Когда значение стопового бита полученного символа равно ло- гическому 0, происходит ошибка кадровой синхронизации. Чтение регистра U0LSR сбрасывает бит U0LSR[3]. Время об- наружения ошибки кадровой синхронизации зависит от состо- яния бита U0FCR[0]. Ошибка кадровой синхронизации связа- на с символом, читаемым из приемного буфера FIFO UORBR UARTO. После обнаружения ошибки кадровой синхронизации линия Rx будет пытаться повторно синхронизировать данные и логика UART0 предположит, что «дефектный» столовый бит является фактически стартовым битом. Однако при этом не может быть гарантировано, что следующий принятый байт бу- дет корректен, даже если нет ошибки кадровой синхронизации 0 4 Прерывание от останова (BI) 0: Состояние прерывания от останова неактивно. 1: Состояние прерывания от останова активно. Когда линия RxDO переводится в состояние наличия данных (НИЗКИЙ уровень на линии) для передачи всей последователь- ности символа (старт, данные, четность, стоп), происходит пре- рывание от останова. Как только состояние останова обнаружи- вается, приемник переводит линию RxDO в состояние маркировки (ВЫСОКИЙ уровень на линии). Чтение регистра U0LSR сбрасывает этот бит состояния. Время обнаружения оста- нова зависит от значения бита U0FCR[0]. Прерывание от остано- ва связано с символом, читаемым из приемного буфера FIFO UORBR UARTO 0
208 Глава 10. Универсальный асинхронный приемопередатчик UARTO Таблица 10.12. Биты регистра состояния линии UARTO (U0LSR — 0хЕ000С014, доступен только для чтения) (продолжение) U0LCR Функция Описание Значение после сброса 5 Буфер (хол- динг) пере- датчика пуст (THRE) 0: U0THR содержит достоверные данные. l.UOTHRnycT. Бит THRE устанавливается немедленно после обнаружения пус- того регистра U0THR UART0 и сбрасывается при записи в U0THR 1 6 Передатчик пуст (ТЕМТ) 0: U0THR и/или U0TSR содержит достоверные данные. 1: U0THR и U0TSR пусты. Бит ТЕМТ устанавливается, когда и регистры U0THR и U0TSR пусты. Бит ТЕМТ сбрасывается, когда любой из регистров U0TSR или U0THR содержит достоверные данные 1 7 Ошибка при- емного буфе- ра FIFO (RXFE) 0: U0RBR не содержит символов с ошибками приема через UART0 или бит U0FCR[0] = 0. 1: UARTO U0RBR содержит символ с не менее чем одной ошиб- кой приема через UART0. Бит U0LSR[7] устанавливается, когда символ с ошибкой приема (в виде ошибки кадровой синхронизации, ошибки четности или прерывания от останова) помещается в регистр U0RBR. Этот бит сбрасывается, когда регистр U0LSR читается, и нет никаких пос- ледующих ошибок в FIFO UARTO 0 Рабочий регистр клавиатуры1* UARTO (UOSCR — ОхЕОООСОЮ) Регистр U0SCR не оказывает никакого эффекта на операции UARTO. Этот регистр может быть записан и/или прочитан по усмотрению пользователя. В интерфейсе прерываний отсутствуют указатели того, что произошли чтение или запись регистра U0SCR. Битовая структура регистра U0SCR приведена в Табл. 10.13. Таблица 10.13. Биты рабочего регистра клавиатуры UARTO (UOSCR — OxEOOOCOlC) U0SCR Функция Описание Значение после сброса 7:0 — Считываемый и записываемый байт 0 10.2. Архитектура UARTO Архитектура модуля UARTO изображена на блок-схеме, приведенной на Рис. 10.1. Интерфейс VPB обеспечивает линию связи между центральным про- цессором и UARTO. Блок приемника UARTO (UORx) контролирует последовательность входных данных, поступающую по линии RxDO от соответствующего входа. Сдвиговый регистр приема UARTO (U0RSR) собирает (составляет в байт) символы, посту- пающие через RxDO. После того, как полный символ собран в U0RSR, он пере- дается в регистр приемного буфера FIFO UARTO, где ожидает обращения для чтения от центрального процессора. Блок передатчика UARTO (UOTx) принимает данные, подготовленные цент- ральным процессором, и буферизует данные в буферном (холдинговом) регист- ре передающего буфера FIFO UARTO (U0THR). Сдвиговый регистр передачи ° Или же «сверхоперативная память». (Прим. науч, ред.)
10.2. Архитектура UARTO 209 Рис. 10.1. Архитектура модуля UARTO UARTO (UOTSR) читает данные, сохраненные в U0THR, и транслирует их в последовательном виде через вывод передачи TxDO. Блок генератора задания скорости обмена через UARTO (U0BRG) формиру- ет сигнал синхронизации обмена с периферийными устройствами, используе- мый блоком передатчика UARTO. Входной сигнал U0BRG (синхросигнал VPB с частотой pclk), после обработки в программируемом делителе, параметры кото- рого задаюся в регистрах U0DLM и U0DLL, преобразуются в тактовый сигнал, частота которого в 16 раз выше основной (характерной) тактовой частоты пере- дачи (NBAUDOUT). Интерфейс прерываний UARTO содержит регистры UOIER и U0IIR. Интер- фейс прерываний получает несколько различных тактовых частот от блоков UOTx и UORx. Информация о состоянии блоков UOTx и UORx сохраняется в регистре U0LSR. Информация об управлении блоками UOTx и UORx сохраняется в ре- гистре UOLCR. 304
ГЛАВА 11 УНИВЕРСАЛЬНЫЙ АСИНХРОННЫЙ ПРИЕМОПЕРЕДАТЧИК UART1 Универсальный асинхронный приемопередатчик микроконтроллеров се- мейства LPC2000 UART1 имеет следующие характеристики: • UART1 идентичен UARTO, но имеет добавочный модемный интерфейс; • 16-байтовые приемный и передающий буфера FIFO; • размещение регистров соответствует промышленному стандарту ‘550; • приемный буфер FIFO «защелкивает» 1, 4, 8 и 14 байт; • встроенный генератор задания скорости обмена с периферийными уст- ройствами; • UART1 включает сигналы интерфейса стандартного модема. Обслуживающие UART1 выводы микроконтроллера LPC2000 перечислены в Табл. 11.1. Таблица ILL Описание выводов UART1 Название вывода Тйп Описание RxDl I Последовательный вход. Последовательно принимает данные TxDl 0 Последовательный выход. Последовательно передает данные CTS1 I Посылка сброса. Активный НИЗКИЙ уровень входного сигна- ла означает, что внешний модем готов принять данные, пере- даваемые через TxDl от UART1. В нормальном режиме работы модемного интерфейса (U1MCR4 = 0), значение этого сигнала дополнительно запоминается в бите U1MSR4. Информация об изменении состояния CTS1 сохраняется в U1MSR0. Для ис- точников прерывания с 4-м уровнем приоритета эта информа- ция сохраняется, если эти прерывания разрешены (U1IER3 = 1) DCD1 I Обнаружение несущей данных. Активный НИЗКИЙ уровень сигнала на входе означает, что внешний модем установил связь с UART1 и может обмениваться данными. В нормаль- ном режиме работы модемного интерфейса (U1MCR4 = 0), значение этого сигнала дополнительно запоминается в би- те U1MSR7. Информация об изменении состояния DCD Сохраняется в U1MSR3. Для источников прерывания с 4-м уровнем приоритета эта информация сохраняется, ес- ли эти прерывания разрешены (U1IER3 = 1)
11.1. Описание регистров UART1 211 Таблица 11.1. Описание выводов UART1 (продолжение) Название вывода Тйп Описание DSR1 I Готовность установки данных. Активный НИЗКИЙ уровень входного сигнала означает, что внешний модем готов устано- вить связь с UART1. В нормальном режиме работы модемно- го интерфейса (U1MCR4 = 0), значение этого сигнала допол- нительно запоминается в бите U1MSR5. Информация об изменении состояния DSR1 сохраняется в U1MSR1. Для ис- точников прерывания с 4-м уровнем приоритета эта информа- ция сохраняется, если эти прерывания разрешены (U1IER3 = 1) DTR1 О Готовность терминала данных. Активный НИЗКИЙ уровень выходного сигнала означает, что UART1 готов установить связь с внешним модемом. Значение этого сигнала дополнительно сохраняется в U1MCR0 RI1 I Индикатор вызова. Активный НИЗКИЙ уровень сигнала на входе означает, что телефонный сигнал вызова был обнару- жен модемом. В нормальном режиме работы модемного ин- терфейса (U1MCR4 = 0), значение этого сигнала дополни- тельно запоминается в бите U1MSR6. Информация об изменении состояния RI1 сохраняется в U1MSR6. Для источ- ников прерывания с 4-м уровнем приоритета эта информация сохраняется, если эти прерывания разрешены (U1IER3 = 1) RTS1 О Посылка запроса. Активный НИЗКИЙ уровень сигнала указы- вает, что UART1 намерен передать данные во внешний модем. Значение этого сигнала дополнительно сохраняется в U1MCR1 11.1. Описание регистров UART1 Логическая схема обслуживания UART1 включает в себя двенадцать 8-бит- ных регистров, которые перечислены в Табл. 11.2. Старший бит регистра U1LCR представляет собой служебный бит доступа к значению делителя (DLAB) и используется для разрешения или запрещения доступа к регистрам, в которых хранится значение коэффициента деления программируемого делите- ля UART1. Регистр буфера приема UART1 (U1RBR — OxEOOl0000, когда DLAB = 0, доступен только для чтения) Регистр U1RBR используется как старший байт приемного буфера FIFO UART1. Старший байт приемного буфера FIFO содержит самый «старый» (пер- вый поступивший в приемный буфер FIFO) принятый символ и может быть прочитан через шинный интерфейс. LSB (младший значащий бит — бит 0) U1RBR представляет собой самый «старый» принятый информационный бит. Если принятый символ кодируется менее чем восемью битами, неиспользован- ные MSB (старшие значащие биты) U1RBR заполняются нулями. Чтобы обратиться к регистру U1RBR, необходимо сбросить бит доступа к значению делителя (DLAB) в регистре U1LCR. Регистр U1RBR доступен толь- ко для чтения.
Таблица 11.2. Регистровая карта UART1 Название Описание Бит 7 Бит 6 Бит 5 Бит 4 БитЗ Бит 2 Бит 1 БитО Доступ Значение после сброса1* Адрес U1RBR Регистр бу- фера приема (MSB) Данные чтения (LSB) RO Неопре- делен- ное ОхЕООЮООО DLAB = 0 U1THR Регистр бу- фера (хол- динга) пере- дачи (MSB) Данные записи (LSB) WO NA ОхЕООЮООО DLAB = 0 U1IER Регистр раз- решения прерываний 0 0 0 0 Разреше- ние пре- рывания по состоя- нию моде- ма Разреше- ние пре- рывания по состоя- нию ли- нии Rx Разреше- ние пре- рывания THRE Разреше- ние пре- рывания при до- ступности принятых данных R/W 0 0хЕ0010004 DLAB = 0 U1IIR Регистр идентифика- ции преры- вания Разрешение буферов FIFO 0 0 IIR3 IIR2 IIR1 IIR0 RO 0x01 0хЕ0010008 U1FCR Регистр уп- равления бу- фером FIFO Триггер (защелка) Rx Зарезервировано — Сброс пе- редающе- го буфера FIFO Сброс приемно- го буфера FIFO Разреше- ние FIFO WO 0 0хЕ0010008 U1LCR Регистр уп- равления ли- нией DLAB Установка стопового бита Бит чет- ности Выбор ти- па четнос- ти Разреше- ние чет- ности Количест- во стопо- вых битов Выбор длины слова R/W 0 ОхЕООЮООС 212 Глава 11. Универсальный асинхронный приемопередатчик UART1
Таблица 11.2. Регистровая карта UART1 (продолжение) Название Описание Бит 7 Бит 6 Бит 5 Бит 4 БитЗ Бит 2 Бит 1 БитО Доступ Значение после сброса1* Адрес U1MCR Регистр управле- ния модемом 0 0 0 «Шлейф» (петля) 0 0 RTS DTR R/W 0 ОхЕООЮОЮ U1LSR Регистр состоя- ния линии Ошибка приемно- го буфера FIFO TEMT THRE BI FE PE OE DR RO 0x60 0хЕ0010014 U1MSR Регистр состоя- ния модема DCD RI DSR CTS Дельта DCD Трансля- ция фрон- та RI Дельта DSR Дельта CTS RO 0 0хЕ0010018 U1SCR Рабочий регистр клавиатуры (MSB) (LSB) R/W 0 OxEOOlOOlC U1DLL Регистр, содер- жащий млад- ший байт дели- теля (MSB) (LSB) R/W 0 ОхЕОО 10000 DLAB = 1 U1DLM Регистр, содер- жащий старший байт делителя (MSB) (LSB) R/W 0 0хЕ0010004 DLAB = 1 Значение относится к данным, содержащимся только в используемых битах, и не включает содержимое зарезервированных битов. 11.1. Описание регистров UART1
214 Глава 11. Универсальный асинхронный приемопередатчик UART1 Битовая структура регистра U1RBR приведена в Табл. 11.3. Таблица 11,3, Биты регистра приемного буфера UART1 (U1RBR — OxEOOlOOOO, когда DLAB = 0, доступен только для чтения) U1RBR Функция Описание Значение после сброса 7:0 Регистр буфера приема Регистр буфера приема UART1 содержит самый «старый» байт, принятый в приемный буфер FIFO UART1 Неопреде- ленное Регистр буфера передачи UART1 (U1THR — OxEOOlOOOO, когда DLAB = О, доступен только для записи) Регистр U1THR используется как старший байт передающего буфера FIFO UART1. Старший байт передающего буфера FIFO содержит самый «новый» (последний поступивший в передающий буфер FIFO) символ и может быть за- писан через шинный интерфейс. Младший бит регистра передается через UART1 первым. Чтобы обратиться к регистру U1THR, необходимо сбросить бит доступа к значению делителя (DLAB) в регистре U1LCR. Регистр U1THR доступен толь- ко для записи. Битовая структура регистра U1THR приведена в Табл. 11.4. Таблица 11,4, Биты регистра передающего буфера UART1 (U1THR — OxEOOlOOOO, когда DLAB = 0, доступен только для записи) U1THR Функция Описание Значение после сброса 7:0 Регистр буфера передачи Запись в регистр буфера передачи UART1 вызывает сохранение записанного байта в передающем буфере FIFO UART1. Байт бу- дет передан через UART1, когда он достигнет «дна» передающе- го буфера FIFO (т. е. окажется первым в очереди на передачу) и когда передатчик станет доступен (свободен) NA Регистры, содержащие младший и старший байты делителя UART1 (U1DLL - OxEOOl0000, U1DLM - OxEOOl0004, когда DLAB = 1) Программируемый 16-битный делитель UART1 входит в состав встроенного генератора задания скорости обмена через UART1. В регистрах U1DLL (млад- шие 8 битов) и U1DLM (старшие 8 битов) содержится значение коэффициента, на который следует делить тактовую частоту VPB (pclk), чтобы в результате по- лучить на выходе UART Г синхросигнал, частота которого ровно в 16 раз превы- шает требуемую скорость обмена с периферийными устройствами. Значение коэффициента деления, равное OOOOh, воспринимается логикой UART1 как значение ООО lh, чтобы не допустить деления на нуль. Для обращения к регист- рам U1 DLL и U1DLM, следует установить в регистре U1LCR бит доступа к зна- чению делителя (DLAB). Битовая структура регистра U1DLL приведена в Табл. 11.5, a U1DLM — в Табл. 11.6.
11.1. Описание регистров UART1 215 Таблица 11.5. Регистр, содержащий младший байт делителя UART1 (U1DLL - ОхЕООЮООО, когда DLAB = 1) U1DLL Функция Описание Значение после сброса 7:0 Регистр, содержа- щий младший байт делителя Регистр, содержащий младший байт делителя, совмес- тно с регистром U1DLM задает скорость обмена через UART1 0x01 Таблица 11.6. Регистр, содержащий старший байт делителя UART1 (U1DLM - 0хЕ0010004, когда DLAB = 1) U1DLM Функция Описание Значение после сброса 7:0 Регистр, содержа- щий старший байт делителя Регистр, содержащий старший байт делителя, совмес- тно с регистром U1DLL задает скорость обмена через UART1 0 Регистр разрешения прерываний UART1 (U1IER — OxEOOl0004, когда DLAB = О) Регистр UHER используется, чтобы разрешать прерывания от четырех ис- точников UART1. Битовая структура регистра U1IER приведена в Табл. 11.7. Таблица 11.7. Регистр разрешения прерываний UART1 (U1IER — 0хЕ0010004, когда DLAB = 0) U1IER Функция Описание Значение после сброса 0 Разрешение прерывания RBR 0: Запретить прерывание RDA. 1: Разрешить прерыванию RDA. Бит UlIER[0] разрешает прерывание при доступности при- нятых данных RDA (Receive Data Available) для UART1. Он также управляет прерыванием от тайм-аута при приеме сим- вола CRT (Character Receive Time-out) 0 1 Разрешение прерывания THRE 0: Запретить прерывание THRE. 1: Разрешить прерыванию THRE. Бит U1 IER[ 1] разрешает прерывание THRE для UART1. Те- кущее состояние этого прерывания отображается в значении 6HTaUlLSR[5] 0 2 Разрешение прерывания по состоянию ли- нии Rx 0: Запретить прерывания по состоянию линии Rx. 1: разрешить прерывания по состоянию линии Rx. Бит U1 IER[2] разрешает прерывания по состоянию линии Rx UART1. Текущее состояние этих прерываний отображает- ся в значении битов U1LSR [4:1] 0 3 Разрешение прерывания по состоянию мо- дема Пользовательское программное обеспечение не должно про- изводить запись в зарезервированные биты. Чтение зарезер- вированного бита возвращает неопределенное значение 0 7:4 Зарезервиро- ваны 0: Запретить прерывание RDA. 1: Разрешить прерыванию RDA. Бит UlIER[0] разрешает прерывание при доступности при- нятых данных RDA (Receive Data Available) для UART1. Он также управляет прерыванием от тайм-аута при приеме сим- вола CRT (Character Receive Time-out) NA Регистр идентификации прерывания UART1 (U1IIR — OxEOOl0008, доступен только для чтения) Регистр U1IIR содержит код текущего состояния, который отображает при- оритет и источник отложенного прерывания. Во время осуществления доступа к регистру U1IIR его содержимое не меняется. Если прерывание происходит во время доступа к U1IIR, то состояние этого прерывания будет отображено при
216 Глава 11. Универсальный асинхронный приемопередатчик UART 1 следующем доступе к U1IIR. Прерывания обрабатываются так, как это описано в Табл. 11.8. Считывая значения битов U1IIR[3:O], подпрограмма обработки прерывания может определить причину прерывания и способ сброса активного прерывания. Аппаратный сброс прерывания производится, только если оно идентифицируется как прерывание типа THRE. Таблица 11.8. Регистр идентификации прерываний UART1 (U1IIR — ОхЕОО10008, доступен только для чтения) U1IIR Функция Описание Значение после сброса 0 Отложен- ное преры- вание 0: Как минимум, одно прерывание является отложенным. 1: Нет отложенных прерываний. Обратите внимание, что бит U1 IIR[0] имеет НИЗКИЙ актив- ный уровень. Отложенное прерывание может быть идентифи- цировано путем анализа битов U1 IER[3:1] 1 3:1 Идентифи- кация пре- рывания 011: Состояние линии приема (RLS). 010: Доступны принятые данные (RDA). ПО: Тайм-аут индикации принятого символа (CTI). 001: Прерывание THRE. Бит U1IER[3] идентифицирует прерывание от приемного буфе- ра FIFO UART1. Все другие комбинации битов U1IER[3:1], кроме вышеуказанных, являются зарезервированными (000, 100, 101,111) 0 5:4 Зарезерви- рованы Пользовательское программное обеспечение не должно произ- водить запись в зарезервированные биты. Чтение зарезервиро- ванного бита возвращает неопределенное значение NA 7:6 Разрешение FIFO Эти биты эквивалентны биту UlFCR[0] 0 Обработка прерываний иллюстрируется в Табл. 11.9. Таблица 11.9. Обработка прерываний UART1 U1IIR [3:0] Приоритет Тйп прерывания Источник прерывания Метод сброса прерывания 0001 — Нет Нет — оно Наиболее высокое Состояние линии Rx/ошибка ОЕ, или РЕ, или FE, или BI Чтение U1LSR 0100 Вторичное Принятые данные до- ступны Принятые данные доступны или достигнут уро- вень срабатывания триггера-защелки в прием- ном буфере FIFO (U1FCR0 = 1) Чтение U1RBR или снижение уровня срабаты- вания триггера- защелки прием- ного буфера FIFO UART1 1100 Вторичное Индикация тайм-аута символа В приемном буфере FIFO находится, как мини- мум, один символ, при этом в течение некоторо- го периода времени не производится операций ввода или удаления символов в буфере FIFO. Длительность этого периода времени зависит от того, сколько символов находится в буфере FIFO и какой установлен уровень срабатывания триггера-защелки (от 3.5 до 4.5 периодов дли- тельности символа). Точное время определяется как: [(длина слова) х 7 — 2] х 8 + [(уровень триггера — количество символов) х 8 + 1] х RCLK Чтение U1RBR
11.1. Описание регистров UART1 217 Таблица 11.9. Обработка прерываний UART1 (продолжение) U1IIR [3:0] Приоритет Ъш прерывания Источник прерывания Метод сброса прерывания 0010 Третичное THRE THRE Чтение U1HR (если он — ис- точник прерыва- ния) или запись bUITHR 0000 Четверич- ное Состояние модема CTS, или DSR, или RI, или DCD Чтение U1 MSR Примечание. Значения 0011,0101,0111,1000,1001,1010,1011,1101,1110,1111 зарезервированы. RLS-прерывание UART1 (U1IIR[3:1] = 011) является прерыванием с самым высоким приоритетом и генерируется всякий раз, когда на входе Rx UART1 имеет место одно из четырех условий (состояний) ошибки: ошибка переполне- ния (ОЕ), ошибка четности (РЕ), ошибка кадровой синхронизации (FE) и пре- рывание останова (BI). Состояния ошибки приема UART1, которые вызывают прерывание, отображаются в значениях битов U1LSR[4:1]. Прерывание сбра- сывается после чтения U1LSR. RDA-прерывание UART1 (U1IIR[3:1] = 010), как и CTI-прерывание (U 1IIR[3:1] = ПО), имеет второй уровень приоритета. Прерывание RDA акти- визируется, когда приемный буфер FIFO UART1 заполняется до уровня сраба- тывания триггера-защелки, определенного битами U1FCR[7:6], и сбрасывает- ся, когда приемный буфер FIFO UART1 освобождается ниже уровня срабатыва- ния триггера-защелки. Когда прерывание RDA активно, центральный процессор может читать блок данных, размер которого определен уровнем сра- батывания триггера-защелки. CTI-прерывание (U 1IIR[3:1] = 110) имеет второй уровень приоритета и ге- нерируется, когда приемный буфер FIFO UART1 содержит не менее одного символа и не пополняется и/или не освобождается в течении времени, равно- го от 3.5 до 4.5 периодов длительности символа. Любая активность приемного буфера FIFO UART1 (чтение или запись сдвигового регистра приема U1RSR UART1) сбросит прерывание. Это прерывание используется, чтобы сохранить U1RBR после того, как символьное сообщение (последовательность симво- лов) было получено, а заданный уровень срабатывания триггера (защелки) еще не достигнут. Например, если периферийное устройство хочет послать 105 символов, и уровень срабатывания триггера (защелки) установлен равным 10 символов, центральный процессор получил бы 10 прерываний RDA, приводя- щих к перемещению 100 символов и от 1 до 5 прерываний CTI (в зависимости от сервисной подпрограммы), приводящих к перемещению (сохранению) 5 символов. THRE-прерывание UART1 (U1IIR[3:1] = 001) имеет третий уровень при- оритета и активизируется, когда передающий буфер FIFO UART1 пуст при вы- полнении некоторых условий инициализации. Эти условия инициализации предназначены для того, чтобы дать передающему буферу FIFO UART1 воз- можность заполняться данными и не генерировать прерывания THRE при сис- темном запуске после включения питания. Условия инициализации заключа- ются в осуществлении одной символьной задержки минус столовый бит всякий раз, когда THRE = 1 и с момента его установки поступило не менее двух симво- лов в регистр U1THR. Эта задержка рассчитана на то, чтобы дать процессору
218 Глава 11. Универсальный асинхронный приемопередатчик UART1 время для записи данных в регистр U1THR без возникновения необходимости декодировать и обслуживать прерывание THRE. Прерывание THRE устанавли- вается немедленно, если в передающем буфере FIFO UART1 находятся два или более символа и регистр U1THR пуст. Прерывание THRE сбрасывается, когда производится запись в U1THR или чтение U1IIR. Прерывание THRE является прерыванием с низким приоритетом (U1 IIR[3:1 ] = 001). Модемное прерывание (U1IIR[3:1] = ООО) имеет самый низкий уровень приоритета и активизируется, когда происходит любое изменение на входах мо- дема, DCD, DSR или CTS. Кроме того, перепад от НИЗКОГО к ВЫСОКОМУ уровню на модемном вводе RI также вызывает модемное прерывание. Источ- ник модемного прерывания может быть определен путем анализа содержимого битов U1MSR[3:O]. Чтение регистра U1MSR сбросит модемное прерывание. Регистр управления буфером FIFO UART1 (U1FCR — OxEOOl0008) Регистр U1FCR управляет операциями, связанными с приемным и переда- ющим буферами FIFO UART1. Битовая структура регистра U1FCR приведена в Табл. 11.10. Таблица 11.10. Биты регистра управления буфером FIFO UART1 (U1FCR — ОхЕОО10008) U1FCR Функция Описание Значение после сброса 0 Разрешение буфе- ра FIFO Активный ВЫСОКИЙ уровень разрешает приемный и пе- редающий буфера FIFO UART1 с доступом, заданным бита- ми U 1FCR[7:1]. Этот бит должен быть установлен для кор- ректного проведения операций UART1. Любое изменение этого бита приведет к автоматическому сбросу содержимо- го приемного и передающего буферов FIFO UART1 0 1 Сброс приемного буфера FIFO Запись логической 1 в бит U1 FCR[ 1 ] очистит все байты в приемном буфере FIFO UART1 и сбросит логическую схему указателя, после чего производится автоматический аппа- ратный сброс самого этого бита. 0 2 Сброс передаю- щего буфера FIFO Запись логической 1 в бит U1 FCR[2] очистит все байты в передающем буфере FIFO UART1 и сбросит логическую схему указателя, после чего производится автоматический аппаратный сброс самого этого бита. 0 5:3 Зарезервированы Пользовательское программное обеспечение не должно производить запись в зарезервированные биты. Чтение за- резервированного бита возвращает неопределенное значе- ние NA 7:6 Выбор уровня триггера (защел- , ки) приемного бу- фера FIFO 00: уровень триггера 0 (по умолчанию 1 символ или 0x01). 01: уровень триггера 1 (по умолчанию 4 символа или 0x04). 10: уровень триггера 2 (по умолчанию 8 символов или 0x08). 11: уровень триггера 3 (по умолчанию 14 символов или ОхОЕ). Эти два бита определяют, сколько символов будет записано в приемный буфер FIFO UART1 прежде, чем будет активи- зировано прерывание. Пользователь может задать один из четырех уровней срабатывания триггера, чтобы настроить приемный буфер FIFO UART1 для обмена с конкретным внешним устройством 0
11.1, Описание регистров UART 1 219 Регистр управления линией UART1 (U1LCR ~ ОхЕООЮООС) Регистр U1LCR определяет формат символов данных, которые должны быть переданы или приняты через UART1. Битовая структура регистра U1LCR приведена в Табл. 11.11. Таблица 11,11, Регистр управления линией UART1 (U1LCR — ОхЕООЮООС) U1LCR Функция Описание Значение после сброса 1:0 Выбор длины слова (символа) 00: Длина символа — 5 битов 01: Длина символа — 6 битов 10: Длина символа — 7 битов 11: Длина символа — 8 битов 0 2 Выбор стопо- вого бита 0:1 столовый бит 1: 2 стоповых бита (1.5, если U1LCR [1:0] = 00) 0 3 Разрешение контроля четности 0: Отключение генерации контроля четности и его проверки. 1: Разрешение генерации контроля четности и его проверки 0 5:4 Выбор контроля четности 00: Проверка на нечетность 01: Проверка на четность 10: Устанавливается «1» в бите четности. 11: Устанавливается «0» в бите четности 0 6 Контроль останова 0: Запретить передачу останова. 1: Разрешить передачу останова. Вывод TxD UART1 сбрасывается в логический 0, когда бит U1LCR[6] имеет активный ВЫСОКИЙ уровень 0 7 Бит доступа к значению делителя 0: Запретить доступ к значению коэффициента деления делителя. 1: Разрешить доступ к значению коэффициента деления делителя 0 Регистр управления модемом UART1 (U1MCR — ОхЕООЮОЮ) Регистр U1MCR разрешает режим модемного «шлейфа» (петли) и управля- ет выходными сигналами модема. Битовая структура регистра U1MCR приведена в Табл. 11.12. Таблица 11,12, Биты регистра управления модемом UART1 (U1MCR — ОхЕООЮОЮ) (продолжение) U1MCR Функция Описание Значение после сброса 0 Управление DTR Управляет состоянием выхода модема DTR. Чтение этого бита возвращает значение логического 0, если активен ре- жим модемного «шлейфа» (петли), в котором происходит взаимное «замыкание» сигналов модемного интерфейса (входы замыкаются на выходы) 0 1 Управление RTS Источник для выхода модема RTS. Чтение этого бита воз- вращает значение логического 0, если активен режим мо- демного «шлейфа» (петли), в котором происходит взаимное «замыкание» сигналов модемного интерфейса (входы замы- каются на выходы) 0 2 Зарезервиро- ван Пользовательское программное обеспечение не должно производить запись в зарезервированные биты. Чтение за- резервированного бита возвращает неопределенное значе- ние NA 3 Зарезервиро- ван Пользовательское программное обеспечение не должно производить запись в зарезервированные биты. Чтение за- резервированного бита возвращает неопределенное значе- ние NA
220 Глава 11. Универсальный асинхронный приемопередатчик UART1 Таблица 11.12. Биты регистра управления модемом UART1 (U1MCR — ОхЕООЮОЮ) (продолжение) U1MCR Функция Описание Значение после сброса 4 Выбор режима «шлейфа» (петли само- диагности- ки) 0: Запретить режим модемного «шлейфа». 1: Разрешить режим модемного «шлейфа». В режиме модемного «шлейфа» осуществляется диагности- ческий тест логических схем модема. При этом, данные с выхода передатчика подаются в последовательном виде на вход приемника. В режиме модемного «шлейфа» вход RxDl не задействован, а выход TxDl удерживается в маскирован- ном состоянии. Четыре управляющих модемных входа (CTS, DSR, RI и DCD) отключаются от соответствующих выводов микроконтроллера. Управляющие модемные выхо- ды (RTS, DTR) переводятся в неактивные состояния. Внут- ри микроконтроллера четыре модемных выхода коммутиру- ются на четыре соответствующих модемных входа. В результате такой коммутации, значения старших четырех битов регистра U1MSR определяются не сигналами на че- тырех модемных входах (DSR, CTS, DCDh RI), как предус- мотрено в нормальном режиме, а значениями младших че- тырех битов регистра U1MCR (соответственно [0], [1], [2] и [3], причем, чтение зарезервированных битов [2] и [3] дает неопределенный результат, что, впрочем, в данном случае несущественно). Таким образом, в режиме «шлейфа» можно генерировать прерывания по состоянию модема — для этого следует произвести запись соответствующих значений в младшие четыре бита регистра U1MCR (точнее, в младшие два бита) 0 7:5 Зарезервиро- ваны Пользовательское программное обеспечение не должно производить запись в зарезервированные биты. Чтение за- резервированного бита возвращает неопределенное значе- ние NA Регистр состояния линии UART1 (U1LSR — OxEOOl0014, доступен только для чтения) Регистр U1LSR доступный только для чтения, содержит информацию о со- стоянии принимаемых и передаваемых через UART1 блоков данных. Битовая структура регистра U1LSR приведена в Табл. 11,13. Таблица 11.13. Биты регистра состояния линии UART1 (U1LSR — 0хЕ0010014, доступен только для чтения) U1LCR Функция Описание Значение после сброса 0 Данные прием- ника готовы (RDR) 0: U1RBR пуст. 1: U1RBR содержит достоверные данные. Бит U1 LSR[0] устанавливается, когда U1RBR содержит не- прочитанный символ и сбрасывается, когда приемный буфер FIFO UART1 пуст 0 1 Ошибка пере- полнения (ОЕ) 0: Состояние ошибки переполнения неактивно. 1: Состояние ошибки переполнения активно. Состояние ошибки переполнения устанавливается, как только происходит переполнение. Чтение регистра U1LSR сбрасывает бит U1 LSR[ 1 ]. Бит U1 LSR[ 1 ] устанавливается, когда в приемник U1RSR UART1 поступил новый символ, а приемный буфер FIFO U1RBR UART1 полон. В этом случае в приемный буфер FIFO U1RBR UART1 не будет записан новый символ поверх старых и поступивший в приемник U1RSR новый символ будет потерян 0
11.1. Описание регистров UART 1 221 Таблица 11,13. Биты регистра состояния линии UART1 (U1LSR — 0хЕ0010014, доступен только для чтения) (продолжение) U1LCR Функция Описание Значение после сброса 2 Ошибка четности (РЕ) 0: Состояние ошибки четности неактивно. 1: Состояние ошибки четности активно. Когда бит четности полученного символа находится в непра- вильном состоянии, происходит ошибка четности. Чтение регистра U1LSR сбрасывает бит U1LSR[2]. Время обнаруже- ния ошибки четности зависит от состояния бита U1FCR[O]. Ошибка четности связана с символом, читаемым из прием- ного буфера FIFO U1RBR UART1 0 3 Ошибка кадро- вой синхрониза- ции (FE) 0: Состояние ошибки кадровой синхронизации неактивно. 1: Состояние ошибки кадровой синхронизации активно. Когда значение стопового бита полученного символа равно логическому 0, происходит ошибка кадровой синхрониза- ции. Чтение регистра U1LSR сбрасывает бит U1LSR[3J. Вре- мя обнаружения ошибки кадровой синхронизации зависит от состояния бита U1FCR[O]. Ошибка кадровой синхрониза- ции связана с символом, читаемым из приемного буфера FIFO U1RBR UART1. После обнаружения ошибки кадровой синхронизации линия Rx будет пытаться повторно синхро- низировать данные и логика UART1 предположит, что «де- фектный» столовый бит является фактически стартовым би- том. Однако при этом не может быть гарантировано, что следующий принятый байт будет корректен, даже если нет ошибки кадровой синхронизации 0 4 Прерывание от останова (BI) 0: Состояние прерывания от останова неактивно. 1: Состояние прерывания от останова активно. Когда линия RxDO переводится в состояние наличия данных (НИЗКИЙ уровень на линии) для передачи всей последова- тельности символа (старт, данные, четность, стоп), происхо- дит прерывание от останова. Как только состояние останова обнаруживается, приемник переводит линию RxDO в состоя- ние маркировки (ВЫСОКИЙ уровень на линии). Чтение ре- гистра U1LSR сбрасывает этот бит состояния. Время обнару- жения останова зависит от значения бита U1FCR[OJ. Прерывание от останова связано с символом, читаемым из приемного буфера FIFO U1RBR UART1 0 5 Буфер (холдинг) передатчика пуст (THRE) 0: U1THR содержит достоверные данные. l:UlTHRnycT. Бит THRE устанавливается немедленно после обнаружения пустого регистра U1THR UART1 и сбрасывается при записи в U1THR 1 6 Передатчик пуст (ТЕМТ) 0: UITHRh/или U1TSR содержит достоверные данные. 1: UITHRh U1TSR пусты. Бит ТЕМТ устанавливается, когда и регистры U1THR и U1TSR пусты. Бит ТЕМТ сбрасывается, когда любой из ре- гистров U1TSR или U1THR содержит достоверные данные 1 7 Ошибка прием- ного буфера FIFO (RXFE) 0: U1RBR не содержит символов с ошибками приема через UART1 или бит UlFCR[0]=0. 1: UART1 U1RBR содержит символ с не менее чем одной ошибкой приема через UART1. Бит U1LSR[7] устанавливается, когда символ с ошибкой приема (в виде ошибки кадровой синхронизации, ошибки четности или прерывания от останова) помещается в регистр U1RBR. Этот бит сбрасывается, когда регистр U1LSR чита- ется, и нет никаких последующих ошибок в FIFO UART1 0
222 Глава 11. Универсальный асинхронный приемопередатчик UART1 Регистр состояния модема UART1 (U1MSR — 0х0хЕ0010018) Регистр U1MSR является регистром только для чтения, который содержит информацию о состоянии входных сигналов модема. Биты U1MSR[3:O] сбра- сываются при чтении U1MSR. Обратите внимание, что модемные сигналы пря- мо не затрагивают операции UART1, а только облегчают программную реализа- цию операций с модемом. Битовая структура регистра U1MSR приведена в Табл. 11.14. Таблица 11.14. Регистр состояния модема UART1 (U1MSR — 0х0хЕ0010018) U1MSR Функция Описание Значение после сброса 0 Дельта CTS 0: На модемном входе CTS не было детектировано каких-либо изменений. 1: На модемном входе CTS были детектированы изменения. Этот бит устанавливается при изменении сигнала на модемном входе CTS, а сбрасывается при чтении регистра U1MSR 0 1 Дельта DSR 0: На модемном входе DSR не было детектировано каких-либо изменений. 1: На модемном входе DSR были детектированы изменения. Этот бит устанавливается при изменении сигнала на модемном входе DSR, а сбрасывается при чтении регистра U1MSR 0 2 Трансля- ция фронта RI 0: На модемном входе RI не было детектировано каких-либо из- менений. 1: На модемном входе RI был детектирован положительный пе- репад (фронт) входного сигнала. Этот бит устанавливается фронтом сигнала на модемном входе RI, а сбрасывается при чтении регистра U1MSR 0 3 Дельта DCD 0: На модемном входе DCD не было детектировано каких-либо изменений. 1: На модемном входе DCD были детектированы изменения. Этот бит устанавливается при изменении сигнала на модемном входе DCD, а сбрасывается при чтении регистра U1MSR 0 4 CTS Дополнительный бит для входного сигнала CTS. В режиме мо- демного «шлейфа» (петли) значение этого бита определяется со- стоянием бита U1MCR[1] 0 5 DSR Дополнительный бит для входного сигнала DSR В режиме мо- демного «шлейфа» (петли) значение этого бита определяется со- стоянием бита U1MCR[O] 0 6 RI Дополнительный бит для входного сигнала RI. В режиме модем- ного «шлейфа» (петли) значение этого бита определяется состо- янием бита U1MCR[2] 0 7 DCD Дополнительный бит для входного сигнала DCD. В режиме мо- демного «шлейфа» (петли) значение этого бита определяется со- стоянием бита U1MCR[3] 0 Рабочий регистр клавиатуры UART1 (U1SCR — OxEOOl001 С) Регистр U1SCR не оказывает никакого эффекта на операции UART1. Этот регистр может быть записан и/или прочитан по усмотрению пользователя. В интерфейсе прерываний отсутствуют указатели того, что произошли чтение или запись регистра U1SCR. Битовая структура регистра UOSCR приведена в Табл. 11.15. Таблица 11.15. Биты рабочего регистра клавиатуры UART1 (U1SCR — OxEOOlOOlC) U1SCR Функция Описание Значение после сброса 7:0 — Читаемый, записываемый байт 0
11.2. Архитектура UART1 223 11.2. Архитектура UART1 Архитектура модуля UART1 представлена на блок-схеме (Рис. 11.1). Интер- фейс VPB обеспечивает линию связи между центральным процессором или хостом и UART1. Рис. 11.1. Архитектура модуля UART1 Блок приемника UART1 (UlRx) контролирует последовательность входных данных, поступающую по линии RxDl от соответствующего входа. Сдвиговый регистр приема UART1 (U1RSR) собирает (составляет в байт) символы, посту- пающие через RxDl. После того, как полный символ собран в U1RSR, он пере- дается в регистр приемного буфера FIFO UART1, где ожидает обращения для чтения от центрального процессора или ведущего (внешнего) компьютера через универсальный интерфейс хоста. Блок передатчика UART1 (UlTx) принимает данные, подготовленные цент- ральным процессором или хостом, и буферизует данные в буферном (холдинго- вом) регистре передающего буфера FIFO UART1 (U1THR). Сдвиговый регистр передачи UART1 (U1TSR) читает данные, сохраненные в U1THR, и транслиру- ет их в последовательном виде через вывод передачи TxDl. Блок генератора задания скорости обмена через UART1 (U1BRG) формиру- ет сигнал синхронизации обмена с периферийными устройствами, используе- мый блоком передатчика UART1. Входной сигнал U1BRG (синхросигнал VPB с частотой pclk), после обработки в программируемом делителе, параметры кото-
224 Глава 11. Универсальный асинхронный приемопередатчик UART 1 рого задаюся в регистрах U1DLM и U1DLL, преобразуются в тактовый сигнал, частота которого в 16 раз выше основной (характерной) тактовой частоты пере- дачи (NBAUDOUT). Модемный интерфейс содержит регистры U1MCR и U1MSR. Этот интер- фейс отвечает за процедуру установления связи между модемом внешнего уст- ройства и UART 1. Интерфейс прерываний содержит регистры U1IER и U1IIR. Интерфейс пре- рываний получает несколько различных тактовых частот от блоков U 1Тх и U1 Rx. Информация о состоянии блоков UlTx и UlRx сохраняется в регистре U1LSR. Информация об управлении блоками UlTx и UlRx сохраняется в ре- гистре U1LCR.
глава 12 ИНТЕРФЕЙС l2C 12.1. Типовые особенности LPC2000 Интерфейс 12С микроконтроллеров LPC2000 имеет следующие особенности: • шинный интерфейс стандарта 12С с возможностью конфигурирования как ведущего (Master), ведомого (Slave) или ведущего/ведомого; • программируемое тактирование, что позволяет управлять скоростью об- мена; • двунаправленная передача данных между ведущим и ведомым; • в режиме Multi-Master возможно одновременное подключение к шине 12С нескольких ведущих устройств, при этом интерфейс 12С автоматичес- ки осуществляет арбитраж с целью передачи последовательных данных без искажений; • шина 12С может использоваться для испытательных и диагностических целей. Основным функциональным назначением интерфейса 12С является связь с внешними периферийными устройствами с последовательным доступом, на- пример: • устройствами памяти с последовательным доступом; • ЖКИ со встроенными контроллерами; • таймером-календарем реального времени; • программируемыми логическими матрицами (ПЛМ) и т. д. 12.2. Общее описание Типичная аппаратная шинная конфигурация 12С показана на Рис. 12.1. К каждой из линий шины — SDA (линия данных) и SCL (линия синхронизации) поключены подтягивающие к «плюсу» источника питания +Up резисторы Rp. В исходном состоянии, когда линии SDA и SCL «отпущены» всеми подключен- ными к шине устройствами 12С, напряжение на этих линиях близко к напряже- нию источника питания. Рис, 12,1, Типичная шинная конфигурация интерфейса 12С 304
226 Глава 12. Интерфейс 12С В зависимости от состояния бита направления (R/W), входящего в состав пе- редаваемых по шине 12С сигналов, на шине возможны два типа обмена данными: • Передача данных ведущего передатчика ведомому приемнику. Первый байт в посылке, переданной ведущим, содержит адрес ведомого. Затем ведущий передает некоторое количество байтов данных. Ведомый возвращает бит «подтверждение» (АСК) после приема каждого переданного ведущим байта. • Передача данных ведомого передатчика ведущему приемнику. Первый байт (адрес ведомого) передается ведущим, а ведомый возвращает бит «подтверждение». Затем следуют байты данных, передаваемые ведомым для ведущего. Ведущий возвращает бит «подтверждение» после каждого принятого байта, кроме последнего байта. После приема последнего пере- данного байта ведущий возвращает бит «неподтверждение» (NOT АСК). Для всех типов обмена ведущее устройство всегда генерирует тактовые им- пульсы последовательной синхронизации на линии SCL и условия START и STOP на линии SDA. Передача заканчивается генерацией условия STOP или повторного условия START. Так как повторное условие START является одно- временно началом следующей последовательной передачи, шина 12С при этом не «отпускается» ведущим. Временные диаграммы, иллюстрирующие передачу данных по шине интер- фейса 12С, приведены на Рис. 12.2. Последовательный синхросигнал на линии SCL всегда генерируется ведущим устройством 12С. Сигналы данных на линии SDA могут генерироваться как ведущим, так и ведомым устройством. Микроконтроллеры семейства LPC2000 имеют байт-ориентированный ин- терфейс 12С, т. е. все операции 12С аппаратно реализованы на уровне байтов. Используются четыре операционных режима 12С: режим ведущего передатчи- ка, режимом ведущего приемника, режим ведомого передатчика и режим ведо- 12.3. Операционные режимы 12С 12.3.1. Режим ведущего передатчика В режиме ведущего передатчика данные передаются от ведущего к ведомо- му. Для инициализации этого режима, в регистр установок управления 12С (I2CONSET) необходимо предварительно записать значения, приведенные в Табл. 12.1.
12.3. Операционные режимы 12С 227 Таблица 12.1. Инициализация регистра I2CONSET для режима ведущего Номер бита Название бита Значение бита 0 — — 1 — — 2 ДА 0 3 SI 0 4 STO 0 5 STA 0 6 I2EN 1 7 — — Бит (флаг) I2EN регистра I2CONSET должен быть установлен, чтобы разре- шить работу интерфейса 12С. Бит (флаг) ДА, наоборот, следует сбросить, чтобы интерфейс 12С микроконтроллера не выдавал в линию бит «подтверждение» (АСК) в случае, когда ведущим на шине является другое устройство. Таким об- разом, функционирование в режиме ведомого блокируется, и интерфейс 12С микроконтроллера будет функционировать в режиме ведущего. Биты (флаги) STA, STO и SI должны быть сброшены. Бит SI сбрасывается путем записи логи- ческой 1 в бит SIC регистра I2CONCLR. Первый байт (его передает ведущий), содержит адрес ведомого приемника (7 битов) и бит направления последующей передачи данных (R/W). В режиме веду- щего передатчика этот бит должен быть сброшен (содержит значение логическо- го 0), что соответствует направлению «запись». Таким образом, первый передава- емый байт содержит адрес ведомого и бит записи (W). Затем ведущий побайтно передает данные. После передачи каждого из байтов данных, ведущий принимает от ведомого бит «подтверждение» (АСК). Условия START и STOP генерируются ведущим, чтобы указать начало и конец последовательной передачи. Когда встроенный программный драйвер интерфейса 12С устанавливает бит STA, происходит переход в режим ведущего передатчика. Теперь, если шина свободна (т. е. другие подключенные к шине устройства не устанавливают на ней напряжение НИЗКОГО уровня), логическая схема 12С генерирует и переда- ет в линию условие START. После этого, микроконтроллер устанавливает бит SI регистра I2CONSET и в регистре состояния интерфейса I2C (I2STAT) возвра- щает код состояния (результат операции), равный 08h. Этот код состояния предназначен для использования вектором и подпрограммой обработки преры- вания, которая сначала должна загрузить адрес ведомого и бит записи в регистр данных интерфейса I2C (I2DAT), а затем сбросить бит SI. Как уже упоминалось выше, бит SI сбрасывается путем записи логической 1 в бит SIC регистра I2CONCLR. Бит SI устанавливается снова после того, как адрес ведомого и бит R/W пе- реданы ведомому, и от него получен бит «подтверждение» (АСК). В регистре со- стояния I2STAT вновь возвращается некоторый код состояния. Действия, кото- рые должны быть предприняты программой пользователя в соответствии со значением этого кода, перечислены в Табл. 12.2. Получить более подробную информацию об особенностях работы интерфейса 12С можно, обратившись к источникам [1, 12], а также к файлам технической документации, которые на- ходятся на прилагаемом к данной книге компакт-диске.
228 Глава 12. Интерфейс 12С Таблица 12.2. Коды состояния для режима 12С ведущего передатчика Код состояния (I2STAT) Текущее состояние шины I2C и аппаратной логики интерфейса Ответ пользовательского программного обеспечения Следующее действие аппаратной логики интерфейса Операции с I2DAT Операции с битами I2CONSET STA STO SI АА 08h Условие START было передано в линию Загрузить адрес ведомого + W X 0 0 X Адрес ведомого + W будет передан в линию; бит АСК будет принят из линии 10h Условие повтор- ный START было передано в линию Загрузить адрес ведомого + W X 0 0 X Как и в предыдущем слу- чае, адрес ведомого + W будет передан в линию Загрузить адрес ведомого + R X 0 0 X 12С перейдет в режим веду- щего приемника 18h Адрес ведомого + W был передан в линию; бит АСК (под- тверждение ведо- мого) был принят из линии Загрузить байт данных 0 0 0 X Байт данных будет передан; бит АСК будет принят из линии Нет операций с I2DAT 1 0 0 X Будет передано условие повторный START Нет операций с I2DAT 0 1 0 X Будет передано условие STOP; флаг STO будет сброшен Нет операций с I2DAT 1 1 0 X Будет передано условие STOP, сопровождаемое условием START; флаг STO будет сброшен 20h Адрес ведомого + W был передан; бит NOT АСК был принят Загрузить байт данных 0 0 0 X Байт данных будет передан; бит АСК будет принят из линии Нет операций с I2DAT 1 0 0 X Будет передано условие повторный START Нет операций с I2DAT 0 1 0 X Будет передано условие STOP; флаг STO будет сброшен Нет операций с I2DAT 1 1 0 X Будет передано условие STOP, сопровождаемое условием START; флаг STO будет сброшен 28h Байт данных в I2CDAT был передан; бит АСК был при- нят Загрузить байт данных 0 0 0 X Байт данных будет передан; бит АСК будет принят из линии Нет операций с I2DAT 1 0 0 X Будет передано условие повторный START Нет операций cIlDAT 0 1 0 X Будет передано условие STOP; флаг STO будет сброшен Нет операций с I2DAT 1 1 0 X Будет передано условие STOP, сопровождаемое условием START; флаг STO будет сброшен
12.3. Операционные режимы 12С 229 Таблица 12.2. Коды состояния для режима 12С ведущего передатчика (продолжение) Код состояния (I2STAT) Текущее состояние шины 12С и аппаратной логики интерфейса Ответ пользовательского программного обеспечения Следующее действие аппаратной логики интерфейса Операции с I2DAT Операции с битами I2CONSET ЭТА STO SI АА 30h Байт данных в I2CDAT был пере- дан; бит NOT АСК был принят Загрузить байт данных 0 0 0 X Байт данных будет передан; бит АСК будет принят из линии Нет операций с I2DAT 1 0 0 X Будет передано условие повторный START Нет операций с I2DAT 0 1 0 X Будет передано условие STOP; флаг STO будет сброшен Нет операций с I2DAT 1 1 0 X Будет передано условие STOP, сопровождаемое условием START; флаг STO будет сброшен 38h Арбитраж поте- рян при передаче адреса ведомого + R/W или байта данных Нет операций с I2DAT 0 0 0 X Шина 12С будет «отпуще- на» без обращения к адре- суемому ведомому Нет операций с I2DAT 1 0 0 X Условие START будет пере- дано в линию, когда шина освободится Формат обмена по шине 12С для режима ведущего передатчика проиллюст- рирован на Рис. 12.3. Адрес ведомого R/W А Данные А Данные « А/А «0» — запись Передача данных: п байт + подтверждение А = Подтверждение (SDA низкий) А = Неподтвержденно (SDA высокий) S = Условие START Р = Условие STOP От ведущего к ведомому От ведомого к ведущему Рис. 12.3. Формат обмена по шине 12С для режима ведущего передатчика 12.3.2. Режим ведущего приемника В режиме ведущего приемника осуществляется прием данных от ведомого передатчика. Передача инициализируется тем же самым способом, что и в ре- жиме ведущего передатчика. После генерации ведущим условия START, под- программа обработки прерывания должна загрузить адрес ведомого и бит на- правления данных в регистр данных I2C (I2DAT), а затем сбросить флаг SI в ре- гистре I2CONSET. Бит направления передачи данных (R/W) должен быть установлен в логическую 1, что соответствует чтению данных. Таким образом, первый переданный байт должен содержать адрес ведомого и бит чтения (R).
230 Глава 12. Интерфейс 12С После передачи ведущим адреса ведомого и бита направления данных и полу- чения от ведомого бита «подтверждение» (АСК), микроконтроллер устанавли- вает бит SI и возвращает код состояния в регистре состояния I2C (I2STAT). Действия, которые должны быть предприняты пользовательским програм- мным обеспечением в соответствии со значением этого кода состояния, пере- числены в Табл. 12.3. Таблица 12.3. Коды состояния для режима 12С ведущего приемника Код состояния (I2STAT) Текущее состояние шины I2C и аппаратной логики интерфейса Ответ пользовательского программного обеспечения Следующее действие аппаратной логики интерфейса Операции с I2DAT Операции с битами I2CONSET STA STO SI АА 08h Передано условие START Загрузить адрес ведомого + R X 0 0 X Адрес ведомого + W будет передан в линию; бит АСК будет принят из ли- нии 10h Передано условие повторный START Загрузить адрес ведомого + R X 0 0 X Как и в предыдущем случае, адрес ведомого + W будет пе- редан в линию Загрузить адрес ведомого + W X 0 0 X 12С перейдет в режим веду- щего передатчика 38h Арбитраж потерян во время приема бита NOT АСК Нет операций с I2DAT 0 0 0 X Шина 12С будет «отпущена»; 12С перейдет в режим ведомо- го Нет операций с I2DAT 1 0 0 X Условие START будет переда- но в линию, когда шина осво- бодится 40h Адрес ведомого + R был передан в ли- нию; бит АСК был при- нят Нет операций с I2DAT 0 0 0 0 Будет принят байт данных из линии и возвращен (передан в линию) бит NOT АСК Нет операций с I2DAT 0 0 0 1 Будет принят байт данных из линии и возвращен (пере- дан в линию) бит АСК 48h Адрес ведомого + R был передан в ли- нию; бит NOT АСК был принят Нет операций с I2DAT 1 0 0 X Условие повторный START будет передано в линию Нет операций с I2DAT 0 1 0 X Условие STOP будет передано в линию; флаг STO будет сброшен Нет операций с I2DAT 1 1 0 X Условие STOP, сопровождае- мое условием START будет передано в линию; флаг STO будет сброшен 50h Байт данных был принят; бит АСК был пере- дан в линию Прочитать байт данных 0 0 0 0 Будет принят байт данных из линии и возвращен (пере- дан в линию) бит NOT АСК Прочитать байт данных 0 0 0 1 Будет принят байт данных из линии и возвращен (пере- дан в линию) бит АСК
12.3. Операционные режимы I2C 231 Таблица 12.3. Коды состояния для режима 12С ведущего приемника (продолжение) Код состояния (I2STAT) Текущее состояние шины 12С и аппаратной логики интерфейса Ответ пользовательского программного обеспечения Следующее действие аппаратной логики интерфейса Операции с I2DAT Операции с битами I2CONSET STA STO SI АА 58h Байт данных был принят; бит NOT АСК был передан в линию Прочитать байт данных 1 0 0 X Условие повторный START будет передано в линию Прочитать байт данных 0 1 0 X Условие STOP будет передано в линию; флаг STO будет сброшен Прочитать байт данных 1 1 0 X Условие STOP, сопровождае- мое условием START будет передано в линию; флаг STO будет сброшен Формат обмена по шине 12С для режима ведущего приемника изображен на Рис. 12.4. На Рис. 12.5 показан формат обмена по шине 12С при переключении интерфейса 12С микроконтроллера из режима ведущего приемника в режим ве- А = Подтверждение (SDA низкий) А = Неподтверждение (SDA высокий) S = Условие START Р = Условие STOP От ведущего к ведомому От ведомого к ведущему Рис. 12.4. Формат обмена по шине 12С для режима ведущего приемника ГГ771 I ^1 Огведущего к ведомому А = Подтверждение (SDA низкий) А= Неподтверждение (SDA высокий) S = Условие START Р = Условие STOP RS = Условие повторный START W = Бит записи От ведомого к ведущему Рис. 12.5. Формат обмена по шине 12С для режима ведущего приемника, а затем для режима ведущего передатчика
232 Глава 12. Интерфейс 12С 12.3.3. Режим ведомого приемника В режиме ведомого (Slave) приемника микроконтроллер получает байты дан- ных от ведущего (Master) передатчика. Переход в режим ведомого приемника осуществляется следующим образом: пользовательская программа инициализи- рует регистр адреса ведомого (I2ADR), записывая в него заданное значение ад- реса, а также инициализирует регистр установок управления I2C (I2CONSET), записывая в него значения, указанные в Табл. 12.4. Таблица 12.4. Инициализация регистра I2CONSET для режима ведомого Номер бита Название бита Значение бита 0 — — 1 — — 2 АА 1 3 SI 0 4 STO 0 5 STA 0 6 I2EN 1 7 — — Бит I2EN (флаг разрешения) регистра I2CONSET должен быть установлен, чтобы разрешить работу интерфейса 12С в микроконтроллере. Установка в ло- гическую 1 бита АА (флаг подтверждения) указывает интерфейсу 12С микро- контроллера, что он должен после получения из линии собственного адреса ве- домого или адреса общего вызова выдавать в линию бит «подтверждение» (АСК). Биты (флаги) STA, STO и SI должны быть сброшены. После инициализации регистров I2ADR и I2CONSET, интерфейс 12С ведо- мого ожидает обращения от внешнего (ведущего) устройства по его (ведомого) индивидуальному адресу ведомого или сетевому адресу общего вызова. Харак- тер этого обращения (запись или чтение) идентифицируется ведомым по значе- нию бита направления данных в поступившей от ведущего посылке. Если бит направления сброшен (НИЗКИЙ уровень соответствует режиму записи в ли- нию), значит, ведущее устройство намерено передавать данные, а интерфейс 12С микроконтроллера переходит в режим ведомого приемника. После получения адреса ведомого и бита направления данных, микроконт- роллер в режиме ведомого приемника устанавливает бит SI и возвращает соот- ветствующий код состояния в регистре состояния (I2STAT). Действия, кото- рые должны быть предприняты пользовательским программным обеспечени- ем в соответствии со значением этого кода состояния, перечислены в Табл. 12.5.
12.3. Операционные режимы I2C 233 Таблица 12.5. Коды состояния для режима 12С ведомого приемника Код состояния (I2STAT) Текущее состояние шины IZC и аппаратной логики интерфейса Ответ пользовательского программного обеспечения Следующее действие аппаратной логики интерфейса Операции с I2DAT Операции с битами I2CONSET STA STO SI АА 60h Индивидуальный адрес ведомого +W был полу- чен из линии; бит АСК был возвращен (пере- дан в линию) Нет опера- ций с I2DAT X 0 0 0 Будет принят байт данных из линии и возвращен (передан в линию) бит NOT АСКн Нет опера- ций с I2DAT X 0 0 1 Будет принят байт данных из линии и возвращен (передан в линию) бит АСК 68h Арбитраж был потерян во время получения от ведущего адреса ведо- мого +R/W; индивидуальный адрес ведомого +W был полу- чен; бит АСК был воз- вращен Нет опера- ций с I2DAT X 0 0 0 Будет принят байт данных из линии и возвращен (передан в линию) бит NOT АСК Нет опера- ций с I2DAT X 0 0 1 Будет принят байт данных из линии и возвращен (передан в линию) бит АСК 70h Адрес общего вызова (00h) был получен; бит АСК был возвращен Нет опера- ций с I2DAT X 0 0 0 Будет принят байт данных из линии и возвращен (передан в линию) бит NOT АСКн Нет опера- ций с I2DAT X 0 0 1 Будет принят байт данных из линии и возвращен (передан в линию) бит АСК 78h Арбитраж был потерян во время получения от ведущего адреса ведо- мого +R/W; адрес обще- го вызова был получен; бит АСК был возвращен Нет опера- ций с I2DAT X 0 0 0 Будет принят байт данных из линии и возвращен (передан в линию) бит NOT АСКн Нет опера- ций с I2DAT X 0 0 1 Будет принят байт данных из линии и возвращен (пере- дан в линию) бит АСК 80h Предварительно адре- сованный индивидуаль- ный адрес ведомого был Прочитать байт данных X 0 0 0 Будет принят байт данных из линии и возвращен (пере- дан в линию) бит NOT АСКн получен; байт данных был получен; бит АСК был возвращен Прочитать байт данных X 0 0 1 Будет принят байт данных из линии и возвращен (пере- дан в линию) бит АСК 88h Предварительно адре- сованный индивидуаль- ный адрес ведомого был получен; байт данных был получен; бит NOT АСК был возвращен Прочитать байт данных 0 0 0 0 Переключение в режим, в ко- тором предварительная адре- сация ведомого отсутствует; индивидуальный сетевой ад- рес ведомого или адрес обще- го вызова не будут распозна- ваться Прочитать байт данных 0 0 0 1 Переключение в режим, в ко- тором предварительная адре- сация ведомого отсутствует; индивидуальный адрес ведо- мого будет распознаваться; адрес общего вызова будет распознаваться, если I2ADR[0] = 1
234 Глава 12. Интерфейс 12С Таблица 12.5. Коды состояния для режима 12С ведомого приемника (продолжение) Код состояния (I2STAT) Текущее состояние шины 12С и аппаратной логики интерфейса Ответ пользовательского программного обеспечения Следующее действие аппаратной логики интерфейса Операции с I2DAT Операции с битами I2CONSET STA STO SI АА 88h Предварительно адре- сованный индивидуаль- ный адрес ведомого был получен; байт данных был получен; бит NOT АСК был возвращен Прочитать байт данных 1 0 0 0 Переключение в режим, в ко- тором предварительная адре- сация ведомого отсутствует; индивидуальный сетевой ад- рес ведомого или адрес обще- го вызова не будут распозна- ваться; условие START будет передано в линию, когда ши- на освободится Прочитать байт данных 1 0 0 1 Переключение в режим, в ко- тором предварительная адре- сация ведомого отсутствует; индивидуальный адрес ведо- мого будет распознаваться; адрес общего вызова будет распознаваться, если I2ADR[0] = 1; условие START будет передано в линию, ког- да шина освободится 90h Предварительно адре- сованный адрес общего вызова был получен; байт данных был получен; бит АСК был возвращен Прочитать байт данных X 0 0 0 Байт данных будет получен и бит NOT АСК будет возвра- щен Прочитать байт данных X 0 0 1 Байт данных будет получен и бит АСК будет возвращен 98h Предварительно адре- сованный адрес общего вызова был получен; байт данных был получен; бит NOT АСК был воз- Прочитать байт данных 0 0 0 0 Переключение в режим, в ко- тором предварительная адре- сация ведомого отсутствует; индивидуальный сетевой адрес ведомого или адрес общего вы- зова не будут распознаваться вращен Прочитать байт данных 0 0 0 1 Переключение в режим, в ко- тором предварительная адре- сация ведомого отсутствует; индивидуальный адрес ведо- мого будет распознаваться; адрес общего вызова будет распознаваться, если I2ADR[0] = 1 Прочитать байт данных 1 0 0 0 Переключение в режим, в ко- тором предварительная адре- сация ведомого отсутствует; индивидуальный сетевой ад- рес ведомого или адрес обще- го вызова не будут распозна- ваться; условие START будет передано в линию, когда ши- на освободится Прочитать байт данных 1 0 0 1 Переключение в режим, в ко- тором предварительная адре- сация ведомого отсутствует; индивидуальный адрес ведо- мого будет распознаваться; адрес общего вызова будет распознаваться, если I2ADR[0] = 1; условие START будет передано в линию, ког- да шина освободится
12.3. Операционные режимы 12С 235 Таблица 12.5. Коды состояния для режима 12С ведомого приемника (продолжение) Код состояния (I2STAT) Текущее состояние шины 12С и аппаратной логики интерфейса Ответ пользовательского программного обеспечения Следующее действие аппаратной логики интерфейса Операции с I2DAT Операции с битами I2CONSET STA STO SI АА AOh Во время работы 12С в режиме ведомого приемника или ведомо- го передатчика, было получено условие STOP или условие повторный START Нет опера- ций с I2DAT 0 0 0 0 Переключение в режим, в ко- тором предварительная адре- сация ведомого отсутствует; индивидуальный сетевой ад- рес ведомого или адрес обще- го вызова не будут распозна- ваться AOh Во время работы 12С в режиме ведомого приемника или ведомо- го передатчика, было получено условие STOP или условие повторный START Нет опера- ций с I2DAT 0 0 0 1 Переключение в режим, в ко- тором предварительная адре- сация ведомого отсутствует; индивидуальный адрес ведо- мого будет распознаваться; адрес общего вызова будет распознаваться, если I2ADR[0] = 1 Нет опера- ций с I2DAT 1 0 0 0 Переключение в режим, в ко- тором предварительная адре- сация ведомого отсутствует; индивидуальный сетевой ад- рес ведомого или адрес обще- го вызова не будут распозна- ваться; условие START будет передано в линию, когда ши- на освободится Нет опера- ций с I2DAT 1 0 0 1 Переключение в режим, в ко- тором предварительная адре- сация ведомого отсутствует; индивидуальный адрес ведо- мого будет распознаваться; адрес общего вызова будет распознаваться, если I2ADR[0] = 1; условие START будет передано в линию, ког- да шина освободится Формат обмена по шине 12С для режима ведомого приемника показан на Рис. 12.6. \ От ведущего к ведомому От ведомого к ведущему Передача данных: -------- п байт + подтверждение А = Подтверждение (SDA низкий) А = Неподтверждение (SDA высокий) S = Условие START Р = Условие STOP W = Бит записи Рис. 12.6. Формат обмена по шине 12С для режима ведомого приемника
236 Глава 12, Интерфейс 12С 12.3.4. Режим ведомого передатчика В режиме ведомого передатчика первый байт принимается от ведущего и обрабатывается аналогично режиму ведомого приемника, за исключением то- го, что установленный бит направления данных (ВЫСОКИЙ уровень соответс- твует чтению данных из линии) сигнализирует о намерении ведущего прини- мать данные от ведомого. По линии SDA в последовательном виде ведомый пе- редает ведущему данные, в то время как по линии SCL от ведущего к ведомому поступает последовательность синхроимпульсов. Условия START и STOP рас- познаются ведомым, как начало и конец последовательной передачи. Как и в режиме ведомого приемника, в режиме ведомого передатчика аппа- ратные средства интерфейса 12С производят сравнение принятого от ведущего адреса ведомого со своим индивидуальным адресом ведомого и адресом общего вызова. Если хотя бы один их этих адресов совпадает с полученным от ведуще- го, то генерируется прерывание микроконтроллера по этому событию. В Табл. 12.6 перечислены коды состояний, возвращаемых микроконтролле- ром в регистре состояния (I2STAT) для режима ведомого передатчика, и дейс- твия, которые должны быть предприняты программой пользователя в соответс- твии со значением этого кода. Таблица 12.6. Коды состояния для режима 12С ведомого передатчика Код состояния (I2STAT) Текущее состояние шины 12С и аппаратной логики интерфейса Ответ пользовательского программного обеспечения Следующее действие аппаратной логики интерфейса Операции с I2DAT Операции с битами I2CONSET STA STO SI АА A8h Индивидуальный сетевой адрес ведомого +R был получен из линии; бит АСК был возвращен (передан в линию) Загру- зить байт данных X 0 0 0 Последний байт данных будет передан в линию; бит АСК будет принят из линии Загру- зить байт данных X 0 0 1 Байт данных будет передан и бит АСК будет принят из линии BOh Арбитраж был поте- рян во время про- хождения адреса ве- домого +R/W от ведущего; индивидуальный адрес ведомого +R был получен; бит АСК был возвращен Загру- зить байт данных X 0 0 0 Последний байт данных будет передан в линию; бит АСК будет принят из линии Загру- зить байт данных X 0 0 1 Байт данных будет передан и бит АСК будет принят из линии B8h Байт данных из регистра I2DAT был передан в линию; бит АСК был принят из линии Загру- зить байт данных X 0 0 0 Последний байт данных будет передан в линию; бит АСК будет принят из линии Загру- зить байт данных X 0 0 1 Байт данных будет передан и бит АСК будет принят из линии
12.3. Операционные режимы I2C 237 Таблица 12.6. Коды состояния для режима 12С ведомого передатчика (продолжение) Код состояния (I2STAT) Текущее состояние шины 12С и аппаратной логики интерфейса Ответ пользовательского программного обеспечения Следующее действие аппаратной логики интерфейса Операции CI2DAT Операции с битами I2CONSET STA STO SI АА COh Байт данных из ре- гистра I2DAT был передан в линию; бит NOT АСК был принят Нет опе- раций с I2DAT 0 0 0 0 Переключение в режим, в котором предварительная адресация ведомо- го отсутствует; индивидуальный се- тевой адрес ведомого или адрес общего вызова не будут распозна- ваться Нет опе- раций с I2DAT 0 0 0 1 Переключение в режим, в котором предварительная адресация ведомо- го отсутствует; индивидуальный ад- рес ведомого будет распознаваться; адрес общего вызова будет распозна- ваться, если I2ADRJ0] = 1 Нет опе- раций с I2DAT 1 0 0 0 Переключение в режим, в котором предварительная адресация ведомо- го отсутствует; индивидуальный се- тевой адрес ведомого или адрес об- щего вызова не будут распознаваться; условие START бу- дет передано в линию, когда шина освободится Нет опе- раций с I2DAT 1 0 0 1 Переключение в режим, в котором предварительная адресация ведомо- го отсутствует; индивидуальный ад- рес ведомого будет распознаваться; адрес общего вызова будет распозна- ваться, если I2ADR[0] = 1; условие START будет передано в линию, ког- да шина освободится C8h Последний байт данных из регистра I2DAT был передан в линию (АА = 0); бит АСК был принят из линии Нет опе- раций с I2DAT 0 0 0 0 Переключение в режим, в котором предварительная адресация ведомо- го отсутствует; индивидуальный се- тевой адрес ведомого или адрес общего вызова не будут распозна- ваться Нет опе- раций с I2DAT 0 0 0 1 Переключение в режим, в котором адресация ведомого отсутствует; ин- дивидуальный адрес ведомого будет распознаваться; адрес общего вызо- ва будет распознаваться, если I2ADR[0] = 1 Нет опе- раций с I2DAT 1 0 0 0 Переключение в режим, в котором предварительная адресация ведомо- го отсутствует; индивидуальный се- тевой адрес ведомого или адрес об- щего вызова не будут распознаваться; условие START бу- дет передано в линию, когда шина освободится Нет опе- раций с I2DAT 1 0 0 1 Переключение в режим, в котором предварительная адресация ведомо- го отсутствует; индивидуальный ад- рес ведомого будет распознаваться; адрес общего вызова будет распозна- ваться, если I2ADR[0] = 1; условие START будет передано в линию, ког- да шина освободится
238 Глава 12. Интерфейс 12С Если от управляющей программы микроконтроллера поступает команда пе- ревести микроконтроллер из режима ведомого в режим ведущего, то аппаратные средства интерфейса 12С ожидают освобождения шины, чтобы не прервать транзакции, возможно, осуществляемые ведомым. Если в режиме ведущего те- ряется шинный арбитраж, то интерфейс 12С микроконтроллера немедленно пе- реключается в режим ведомого и может обнаружить свой индивидуальный адрес ведомого в той же самой последовательной передаче. В Табл. 12.7 приведены значения кодов состояния интерфейса 12С, которые возвращаются в регистре состояния (I2STAT) в случае ошибок шины или дру- гих некорректных ситуаций. Таблица 12.7. Коды прочих состояний интерфейса 12С Код состояния (I2STAT) Текущее состояние шины 12С и аппаратной логики интерфейса Ответ пользовательского программного обеспечения Следующее действие аппаратной логики интерфейса Операции с I2DAT Операции с битами I2CONSET STA STO SI АА F8h Неопределенное состоя- ние, при котором никакая информация недоступна; SI = 0 Нет опе- раций с I2DAT Нет операций с I2CONSET Ожидание или продолже- ние текущей передачи 00h Ошибка на шине в режиме ведущего или выбор режи- ма ведомого из-за некор- ректных условий START или STOP. Состояние 00h может также наступить в случае взаимного наложе- ния попыток интерфейса 12С перейти в неопределен- ное состояние Нет опе- раций с I2DAT 0 1 0 X В режимах ведущего или адресуемого ведомого за- действованы только внут- ренние аппаратные средс- тва 12С. В любом случае, шина 12С будет «отпущена» и интерфейс 12С переклю- чится в режим ведомого без предварительной адре- сации; бит STO будет сброшен Формат обмена по шине 12С для режима ведомого передатчика показан на Рис. 12.7. п байт + подтверждение От ведущего к ведомому А = Подтверждение (SDA низкий) А = Неподтверждение (SDA высокий) S = Условие START Р = Условие STOP От ведомого к ведущему Рис. 12.7. Формат обмена по шине 12С для режима ведомого передатчика
12.4. Описание выводов 239 12.4. Описание выводов Описание выводов интерфейса 12С микроконтроллеров LPC2000 приведено в Табл. 12.8. Таблица 12.8. Описание выводов интерфейса 12С Название вывода Ъш Описание SDAO, SDA1 I/O Последовательные данные. Вход и выход данных 12С. Сопряженная с этой це- пью линия микроконтроллера, в соответствии со спецификациями 12С, имеет выход с открытым коллектором SCLO, SCL1 I/O Последовательный синхросигнал. Вход и выход синхросигнала 12С. Сопряжен- ная с этой цепью линия микроконтроллера, в соответствии со спецификация- ми 12С, имеет выход с открытым коллектором 12.5. Описание регистров Интерфейс 12С микроконтроллеров семейства LPC2000 включает в себя семь специальных регистров, перечисленных в Табл. 12.9. Примечание. В микроконтроллерах LPC2000, имеющих два интерфейса I2C (I2C0,I2C1), специальные регистры, относящиеся к интерфейсу I2C0, имеют адреса, совпадающие с адре- сами специальных регистров интерфейса 12С в микроконтроллерах LPC2000 с одним интер- фейсом 12С. Таблица 12.9. Карта регистров интерфейса 12С Название Описание Доступ Значение после сброса1* Адрес для I2C0 Адрес для I2C1 I2CONSET Регистр установок уп- равления 12С Чтение/Установка 0 ОхЕООЮООО 0хЕ005С000 I2STAT Регистр состояния 12С Только чтение 0xF8 0хЕ001С004 0хЕ005С004 I2DAT Регистр данных 12С Чтение/Запись 0 0хЕ001С008 0хЕ005С008 I2ADR Регистр адреса ведо- мого гС Чтение/Запись 0 0хЕ001С00С 0хЕ005С00С I2SCLH Регистр старшего по- луслова рабочего цик- ла SCL гС Чтение/Запись 0x04 OxEOOlCOlO 0хЕ005С010 I2SCLL РеТйстр младшего по- луслова рабочего цик- ла SCL гС Чтение/Запись 0x04 0хЕ001С014 0хЕ005С014 I2CONCLR Регистр управления сбросом 12С Только сброс NA 0хЕ001С018 0хЕ005С018 ’) Значение относится к данным, содержащимся только в используемых битах, и не включает содержимое зарезервированных битов.
240 Глава 12. Интерфейс 12С Регистр установок управления PC (для I2C0:I2C0NSET или I2COCONSET—ОхЕОО1 СООО, для I2C1:12C1C0NSET-0хЕ005 СООО) Этот регистр содержит следующие флаги. АА — флаг выдачи бита «подтверждение». Если флаг установлен, микро- контроллер возвращает в линию SDA бит «подтверждение» (НИЗКИЙ уро- вень на линии SDA), синхронизированный соответствующим «подтвержде- нию» тактовым импульсом на линии SCL. Это происходит в следующих ситу- ациях: 1. По шине SDA был принят адрес ведомого, совпадающий с адресом, храня- щимся в регистре адреса ведомого 12С. 2. По шине SDA был принят адрес общего вызова, в то время как бит общего вызова (GC) в регистре I2ADR установлен в 1. 3. По шине SDA был принят байт данных, а интерфейс 12С находится в режиме ведущего приемника. 4. По шине SDA был принят байт данных, а интерфейс 12С находится в режиме ведомого приемника, к которому адресуется обращение. Бит АА может быть сброшен путем записи логической единицы в бит ААС регистра I2CONCLR. Когда бит АА сброшен, микроконтроллер возвращает в линию SDA бит «неподтверждение» (ВЫСОКИЙ уровень на линии SDA), син- хронизированный соответствующим «подтверждению» тактовым импульсом на линии SCL. Это происходит в следующих ситуациях: 1. По шине SDA был принят байт данных, а интерфейс 12С находится в режиме ведущего приемника. 2. По шине SDA был принят байт данных, а интерфейс 12С находится в режиме ведомого приемника, к которому адресуется обращение. SI — флаг прерывания от 12С. Этот бит устанавливается, когда наступает одно из 25 возможных активных состояний интерфейса 12С. Как правило, прерывание 12С используется лишь для того, чтобы уведомить неактивное ве- домое устройство о наступлении на шине 12С условия START или условия STOP (если это неактивное ведомое устройство ожидает начала обмена по шине 12С). Бит SI может быть сброшен путем записи логической 1 в бит SIC регистра I2CONCLR. STO — флаг условия STOP. Установка этого бита заставляет интерфейс 12С генерировать на шине условие STOP в режиме ведущего или выйти из состояния ошибки условия в режиме ведомого. Когда бит STO устанавливается в режиме ведущего, на шине 12С генерируется условие STOP. Когда аппаратные средства шины обнаруживают условие STOP, бит STO автоматически сбрасывается. В режиме ведомого, установка этого бита выводит интерфейс 12С из состоя- ния ошибки условия. В этом случае, условие STOP на шине не генерируется, а аппаратные средства интерфейса 12С ведут себя так, как будто условие STOP было получено. Интерфейс 12С переключается в режим ведомого приемника, к которому не адресовалось обращение. Затем флаг STO автоматически сбрасывается аппаратными средствами шины. STA — флаг условия START. Установка этого бита заставляет интерфейс 12С перейти в режим ведущего и сгенерировать на шине 12С условие START или пов- торное условие START, если интерфейс 12С уже находится в режиме ведущего.
12.5. Описание регистров 241 В случае, когда бит STA устанавливается в режиме ведомого 12С, произво- дится переход в режим ведущего, проверка шины и, если шина свободна, гене- рация на ней условия START Если шина не свободна, то реализующая интер- фейс 12С логическая схема ожидает условия STOP (которое освободит шину), а затем по истечении задержки, равной половине периода внутреннего тактового генератора, генерирует условие START Если интерфейс 12С уже находится в ре- жиме ведущего, и принял или передал данные, то установка бита STA вызовет генерацию условия «повторный START». Бит STA может быть установлен в любое время, включая моменты, когда ин- терфейс 12С находится в режиме ведомого, к которому адресуется обращение. Бит STA может быть сброшен путем записи логической 1 в бит STAC регист- ра I2CONCLR. Когда бит STA сброшен, условия START или повторный START не могут быть сгенерированы. В ситуации, когда установлены оба бита STA и STO, на шине 12С будет сгенерировано состояние STOP, если интерфейс находится в режиме ведуще- го, а после этого будет сгенерировано условие START. Если интерфейс 12С на- ходится в режиме ведомого, то будет сгенерировано внутреннее условие, соот- ветствующее условию STOP, однако условие STOP на шину 12С передано не будет. I2EN — бит разрешения интерфейса 12С. Когда бит I2EN установлен, рабо- та интерфейса 12С микроконтроллера разрешена. Бит I2EN может быть сбро- шен путем записи логической 1 в бит I2ENC регистра I2CONCLR. Когда бит I2EN сброшен, функция интерфейса 12С микроконтроллера заблокирована. Битовая структура регистра I2CONSET приведена в Табл. 12.10. Таблица 12.10. Биты регистра установок управления 12С (для I2C0:12CONSET или I2COCONSET - OxEOOl С000, для I2C1:12C1CONSET - 0хЕ005 С000) Биты I2CONSET Название Описание Значение после сброса 0 Зарезер- вирован Пользовательское программное обеспечение не должно производить запись в зарезервированные биты. Чтение зарезервированного бита возвращает неопределенное значение NA 1 Зарезер- вирован Пользовательское программное обеспечение не должно производить запись в зарезервированные биты. Чтение зарезервированного бита возвращает неопределенное значение NA 2 АА Флаг выдачи бита «подтверждение» 0 3 SI Флаг прерывания от 12С 0 4 STO Флаг STOP 0 5 STA Флаг START 0 6 I2EN Бит разрешения 12С 0 7 Зарезер- вирован Пользовательское программное обеспечение не должно производить запись в зарезервированные биты. Чтение зарезервированного бита возвращает неопределенное значение NA 304
242 Глава 12. Интерфейс 12С Регистр управления сбросом FC (для I2C0:I2C0NCLR или I2COCONCLR — ОхЕО01 0018, для 1201:12C1C0NCLR - ОхЕООб 0018) Битовая структура регистра I2CONCLR приведена в Табл. 12.11. Таблица 12.11. Биты регистра управления сбросом 12С (для I2C0:12CONCLR или I2COCONCLR - OxEOOl С018, для I2C1:12C1CONCLR - 0хЕ005 С018) Биты I2CONCLR Название Описание Значение после сброса 0 Зарезер- вирован Пользовательское программное обеспечение не должно про- изводить запись в зарезервированные биты. Чтение зарезер- вированного бита возвращает неопределенное значение NA 1 Зарезер- вирован Пользовательское программное обеспечение не должно про- изводить запись в зарезервированные биты. Чтение зарезер- вированного бита возвращает неопределенное значение NA 2 ААС Бит сброса флага выдачи бита «подтверждение». Запись ло- гической 1 в этот бит сбрасывает флаг ДА (очищает бит) в ре- гистре I2CONSET. Запись логического 0 не приводит к ка- ким-либо последствиям NA 3 SIC Бит сброса флага прерывания от 12С. Запись логической 1 в этот бит сбрасывает флаг SI в регистре I2CONSET. Запись логического 0 не приводит к каким-либо последствиям NA 4 Зарезер- вирован Пользовательское программное обеспечение не должно про- изводить запись в зарезервированные биты. Чтение зарезер- вированного бита возвращает неопределенное значение NA 5 STAC Бит сброса флага START. Запись логической 1 в этот бит сбрасывает флаг STA в регистре I2CONSET. Запись логичес- кого 0 не приводит к каким-либо последствиям NA 6 I2ENC Бит отключения интерфейса 12С. Запись логической 1 в этот бит сбрасывает флаг I2EN в регистре I2CONSET. Запись ло- гического 0 не приводит к каким-либо последствиям NA 7 Зарезер- вирован Пользовательское программное обеспечение не должно про- изводить запись в зарезервированные биты. Чтение зарезер- вированного бита возвращает неопределенное значение NA Регистр состояния PC (для I2C0:12STATили I2C0STAT — OxEOOl 0004, для I2C1: I2C1STAT—ОхЕООб С004) Этот регистр доступен только для чтения. Он содержит код состояния ин- терфейса 12С. Младшие три бита этого регистра всегда равны 0. Всего имеется 26 возможных кодов состояния, из них 25 активных. Код состояния, равный F8h, говорит о том, что состояние интерфейса 12С не менялось и бит (флаг) SI регистра I2CONSET не установлен (т. е. его значение равно 0). Каждое из ос- тальных 25 значений кодов состояния соответствует определенному состоянию интерфейса 12С. Когда наступает любое из этих состояний, автоматически уста- навливается бит SI регистра I2CONSET. Более подробную информацию о кодах состояния интерфейса I2C. Можно получить, обратившись к источнику [12], а также к файлам технической документации, которые находятся на прилагае- мом к данной книге компакт-диске. Битовая структура регистра I2STAT приведена в Табл. 12.12. Таблица 12.12. Биты регистра состояния 12С (для I2C0:12STAT или I2C0STAT - OxEOOl С004, для I2C1:12C1STAT - 0хЕ005 С004) Биты I2STAT Название Описание Значение после сброса 2:0 Состояние Эти биты всегда равны 0 0 7:3 Состояние Биты (код) состояния 1
12.5. Описание регистров 243 Регистр данных 12С (для I2C0:12DATили I2C0DAT — OxEOOl С008, для I2C1:I2C1DAT—ОхЕООб С008) Этот регистр содержит данные, которые будут переданы, или которые были только что получены через 12С. Центральный процессор может производить за- пись и чтение регистра данных в любое время, кроме момента, когда произво- дится прием или передача байта путем аппаратного сдвига содержимого регист- ра. Обращение к регистру данных возможно только в том случае, когда установ- лен бит (флаг) SI регистра I2CONSET Данные в регистре I2DAT остаются устойчивыми так долго, как долго остается установленным бит SL Данные в I2DAT всегда сдвигаются справа налево: первым передается MSB (бит 7), а пос- ле завершения приема байта данных первый принятый бит этого байта данных располагается в MSB регистра I2DAT. Битовая структура регистра I2DAT приведена в Табл. 12.13. Таблица 12.13. Биты регистра данных 12С (для I2C0:12DAT или I2C0DAT — OxEOOl С008, для I2C1:12C1DAT - 0хЕ005 С008) Биты I2DAT Название Описание Значение после сброса 7:0 Данные Переданные/принятые биты данных 0 Регистр адреса ведомого ?С (для I2C0:I2ADRили I2C0ADR — OxEOOl СООС, для I2C1:12C1ADR - ОхЕООб СООС) Этот доступный для чтения и записи регистр используется только тогда, когда интерфейс 12С работает в режиме ведомого. В режиме ведущего, содержи- мое регистра I2ADR не имеет никакого значения. Младший бит (GC) регистра I2ADR является битом разрешения детектирования логикой 12С адреса общего вызова (00h). Когда этот бит установлен, адрес общего вызова (00h) будет опоз- наваться интерфейсом 12С. Битовая структура регистра I2ADR приведена в Табл. 12.14. Таблица 12.14. Биты регистра адреса ведомого 12С (для I2C0:12ADR или I2C0ADR — OxEOOl СООС, для I2C1:12C1ADR - 0хЕ005 СООС) Биты I2ADR Название Описание Значение после сброса 0 GC Бит разрешения детектирования общего вызова 0 7:1 Адрес Адрес ведомого в режиме ведомого 0 Регистры рабочего цикла SCL12С (для I2C0:12SCLH или I2C0SCLH — ОхЕО01 С010, для I2C1:I2C1SCLH - ОхЕООб СОЮ, для I2C0:12SCLL или I2C0SCLL - OxEOOl С014, для I2C1:12C1SCLL - ОхЕООб С014) Битовая структура регистров I2SCLH, I2SCLL приведена соответственно в Табл. 12.15, Табл. 12.16. Таблица 12.15. Биты регистра старшего слагаемого рабочего цикла SCL12С (для I2C0:12SCLH или I2C0SCLH - OxEOOl СОЮ, для I2C1:12C1SCLH - 0хЕ005 СОЮ) Биты I2SCLH Название Описание Значение после сброса 15:0 Счетные биты Счетные биты старшего слагаемого выбора периода SCL 0x0004
244 Глава 12. Интерфейс 12С Таблица 12.16. Биты регистра младшего слагаемого рабочего цикла SCL12С (для I2C0: I2SCLL или I2C0SCLL - OxEOOl С014, для I2C1:12C1SCLL - 0хЕ005 С014) Биты I2SCLL Название Описание Значение после сброса 15:0 Счетные биты Счетные биты младшего слагаемого выбора периода SCL 0x0004 Программа-пользователь может выбирать желаемую скорость передачи данных через интерфейс 12С путем установки значений регистров I2SCLH и I2SCLL. Содержимое регистра I2SCLH представляет собой одно 16-битное сла- гаемое числа, которое определяет длительность (в циклах pclk) периода синхро- импульсов на линии SCL интерфейса 12С, а содержимое регистра I2SCLL — другое слагаемое. Частота синхроимпульсов SCL вычисляется в соответствии со следующей формулой: Частота передачи битов = pclk / (I2SCLH + I2SCLL), где (I2SCLH + I2SCLL) — значение суммы содержимого регистров I2SCLH и I2SCLL. Значения I2SCLH и I2SCLL не обязательно должны быть одинаковыми. Встроенное программное обеспечение может задавать различную длительность рабочего цикла SCL, помещая в I2SCLH и I2SCLL соответствующие числа. Од- нако необходимо всегда следить за тем, чтобы частота передачи данных через интерфейс 12С лежала в диапазоне 0...400 кГц. Кроме того, на значения регист- ров I2SCLH и I2SCLL накладывается следующее ограничение: каждое из содер- жащихся в них чисел должно быть больше или равно четырем (0004h). Возможные значения частоты передачи битов для интерфейса 12С, в зависи- мости от содержимого регистров I2SCLH, I2SCLL и значения делителя VPB приведены в Табл. 12.17...Табл. 12.19. Таблица 12.17. Выбор скорости обмена через интерфейс 12С для значения делителя VPB - 1 I2SCLL + I2SCLH Частота передачи битов [кГЦ] для cclk = 16 МПд cclk = 20 МЩ cclk = 40 МПд cclk = 60 МПд 8 — — — — 10 — — — — 25 — — — — 50 320.0 400.0 — — 75 213.333 266.667 — — 100 160.0 200.0 400.0 — 160 100.-6 125.0 250.0 375.0 200 80.0 100.0 200.0 300.0 320 50.0 62.5 125.0 187.5 400 40.0 50.0 100.0 150.0 510 31.373 39.216 78.431 117.647 800 20.0 25.0 50.0 75.0 1280 12.5 15.625 31.25 46.875
12.5. Описание регистров 245 Таблица 12.18. Выбор скорости обмена через интерфейс 12С для значения делителя VPB = 2 I2SCLL + I2SCLH Частота следования битов [кГЦ] для cclk = 16 MDi cclk = 20 MRi cclk = 40 Mill cclk = 60 МГц 8 — — — — 10 — — — — 25 320.0 400.0 — — 50 160.0 200.0 400.0 — 75 106.667 133.333 266.667 400.0 100 80.0 100.0 200.0 300.0 160 50.0 62.5 125.0 187.5 200 40.0 50.0 100.0 150.0 320 25.0 31.25 62.5 93.75 400 20.0 25.0 50.0 75.0 510 15.686 19.608 39.216 58.824 800 10.0 12.5 25.0 37.5 1280 6.25 7.813 15.625 23.438 Таблица 12.19. Выбор скорости обмена через интерфейс I2C для значения делителя VPB = 4 I2SCLL + I2SCLH Частота следования битов [кГЦ] для cclk cclk =16 МПд cclk = 20 МПд cclk = 40 МГЦ cclk = 60 МПд 8 500.0 — — — 10 400.0 — — — 25 160.0 200.0 400.0 — 50 80.0 100.0 200.0 300.0 75 53.333 66.667 133.333 200.0 100 40.0 50.0 100.0 150.0 160 25.0 31.25 62.5 93.75 200 / 20.0 25.0 50.0 75.0 320 12.5 15.625 31.25 46.875 400 10.0 12.5 25.0 37.5 510 7.843 9.804 19.608 29.412 800 5.0 6.25 12.5 18.75 1280 3.125 3.906 7.813 11.719
246 Глава 12. Интерфейс 12С Рис. 12.8. Блок-схема интерфейса 12С На Рис. 12.8 приведена обобщенная блок-схема интерфейса 12С микроконт- роллеров семейства LPC2000.
ГЛАВА 13 ИНТЕРФЕЙС SPI Интерфейс SPI микроконтроллеров LPC2000 имеет следующие особен- ности: • два полнофункциональных и независимых контроллера SPI; • интерфейс соответствует стандартной спецификации Serial Peripheral Interface (SPI); • синхронное последовательное полнодуплексное соединение; • интерфейс SPI поддерживает режимы ведущего и ведомого; • максимальная задающая частота обмена составляет одну восьмую от входной тактовой частоты. 13.1. Архитектура блока SPI Блок-схема модуля SPI LPC2000, в соответствии с которой построены ин- терфейсы SPI0 и SPI1, приведена на Рис. 13.1. MOSIJn MOSI-OUt Рис, 13.1. Блок-схема модуля SPI
248 Глава 13. Интерфейс SPI 13.2. Описание интерфейса SPI 13.2.1. Краткий обзор SPI Встроенные в микроконтроллеры семейства LPC2000 модули SPIO и SPI1 представляют собой полнодуплексные последовательные интерфейсы. Они мо- гут обмениваться данными с несколькими ведущими и ведомыми устройствами SPI, подключенными к одной шине. При передаче данных через SPI, в каждый момент времени возможна связь только одного ведущего с одним ведомым. В ходе обмена данными, ведущий передает байт данных ведомому, а ведомый од- новременно передает байт данных ведущему. Прием и передача тактируются одним и тем же синхросигналом SCK, который вырабатывается ведущим. 13.2.2. Передача данных через SPI На Рис. 13.2 приведена временная диаграмма, иллюстрирующая, на приме- ре передачи восьми битов (одного байта) данных, четыре различных формата передачи данных, которые могут использоваться в стандарте SPI. Диаграмма состоит из трех частей. В первой части показаны сигналы SSEL и SCK. Во вто- рой части показаны сигналы MOSI и MISO, когда переменная (параметр ин- терфейса) СРНА = 0, а в третьей — сигналы MOSI и MISO, когда СРНА = 1. SCK(CPOL = 0) SCK(CPOL=1) SSEL СРНА = О Цикл# СРНА = О MOSI (СРНА = 0) MISO (СРНА = 0) СРНА=1 Цикл# СРНА =1 MOSI (СРНА=1) MISO(CPHA=1) Рис. 13.2. Возможные форматы передачи данных через SPI
13.2. Описание интерфейса SPI 249 Следует обратить внимание на следующие два обстоятельства. Во-первых, синхросигнал SCK будет иметь разный вид в зависимости от значения перемен- ной CPOL, и, соответственно, сдвиг данных при передаче будет производиться по фронту или спаду сигнала SCK. Во-вторых, стандарт SPI требует, чтобы при СРНА = 1 сигнал выбора ведомого SSEL всегда переходил в неактивный (ВЫ- СОКИЙ) уровень между передачами отдельных байтов данных. При СРНА = О сигнал SSEL между передачами байтов может оставаться в активном (НИЗ- КОМ) уровне. С учетом этого, можно утверждать, что при СРНА = 0 реальная скорость обмена по шине SPI будет несколько выше, чем при СРНА = 1, за счет экономии времени, которое ведущее устройство тратит на генерацию импульса ВЫСОКОГО уровня на линии SSEL. Необходимо заметить, что у ведущего и ведомого устройств, осуществляю- щих обмен через SPI, установленные комбинации переменных CPOL и СРНА должны, соответственно, совпадать. В Табл. 13.1 приведены условия синхронизации передачи и приема данных при обмене через SPI для всех возможных комбинаций переменных CPOL и СРНА. Таблица 13.1. Условия синхронизации передачи и приема данных через SPI Значения CPOL и СРНА Управление передачей первого бита данных Управление передачей остальных битов данных Прием (выборка) данных CPOL = 0, СРНА = 0 До первого фронта (положитель- ного перепада) сигнала SCK Спадом (отрицательным перепадом) сигнала SCK Фронтом сигнала SCK CPOL = 0, СРНА= 1 Первым фронтом сигнала SCK Фронтом сигнала SCK Спадом сигнала SCK CPOL=1, СРНА = 0 До первого спада сигнала SCK Фронтом сигнала SCK Спадом сигнала SCK CPOL = 1, СРНА= 1 Первым спадом сигнала SCK Спадом сигнала SCK Фронтом сигнала SCK Момент начала передачи байта через SPI для конкретного устройства, в об- щем случае, определяется тем/является ли оно ведущим или ведомым, а также зависит от значения переменной СРНА. Если устройство является ведущим, то оно само определяет конкретный момент начала передачи, когда имеет подле- жащий передаче в ведомое устройство байт (или хочет получить байт от ведомо- го). Для осуществления передачи, ведущее устройство начинает генерировать синхросигнал на своем выходе SCK и синхронно с ним (в соответствии с усло- виями Табл. 13.1) выдает на линию MOSI подлежащий передаче байт в последо- вательном виде. Передача заканчивается, когда заканчивается последний так- товый цикл (см. Рис. 13.2). Если устройство является ведомым и СРНА = 0, то оно начинает пере- дачу, когда внешний сигнал SSEL переходит в активный уровень, и закан- чивает, когда этот сигнал возвращается в пассивный уровень (см. Рис. 13.2). Если устройство является ведомым и СРНА = 1, то оно начинает передачу по первому фронту внешнего синхроимпульса в случае, если ведомый предва- рительно выбран активным уровнем внешнего сигнала SSEL, и заканчивает по последнему фронту синхроимпульса, который производит выборку дан- ных (см. Рис. 13.2).
250 Глава 13. Интерфейс SPI 13.3. Детализация периферии SPI 13.3.1. Общая информация Управление периферийным модулем SPI осуществляется с помощью четы- рех регистров. Регистр управления SPI содержит программируемые биты, которые управ- ляют функциями блока SPL Значения этих битов должны быть установлены до начала обмена в соответствии с заданными параметрами настройки SPL Регистр состояния SPI содержит доступные только для чтения биты, кото- рые используются, чтобы контролировать состояние интерфейса SPI, включая штатные функции и исключительные ситуации (ИС). Главное назначение это- го регистра состоит в том, чтобы обнаружить завершение передачи данных. Для этой цели предназначен бит SPIF. Прочие биты в этом регистре являются индикаторами исключительной ситуации. Эти ИС будут описаны ниже в этом разделе. Регистр данных SPI используется для хранения передаваемого и принимае- мого байтов данных. Для осуществления фактической передачи и приема пос- ледовательных данных в логической схеме блока SPI имеется внутренний сдви- говый регистр. Предназначенные для передачи данные записываются в регистр данных SPI. При этом, фактически производится запись во внутренний сдвиго- вый регистр, поскольку какой-либо буфер между ним и регистром данных от- сутствует. В связи с этим, данные должны записываться в регистр передачи SPI тогда, когда требуется немедленно начать передачу. В отличие от передаваемых, принимаемые данные в интерфейсе SPI буфери- зированы. После окончания передачи, принятые данные автоматически пере- мещаются в отдельный байтовый буфер, который позже может быть прочитан. Чтение регистра данных SPI возвращает значение буфера принятых данных. Регистр счетчика синхроимпульсов SPI управляет тактовой частотой, когда блок SPI находится в режиме ведущего. Этот регистр должен быть инициализи- рован до начала передачи через SPI, если SPI является ведущим. В случае, если SPI является ведомым, этот регистр не используется. В качестве линий ввода/вывода SPI используются стандартные линии вво- да/вывода CMOS. Если блок SPI сконфигурирован для режима ведомого, его линии ввода/вывода активны только в том случае, когда внешний сигнал SSEL имеет активный уровень. 13.3.2. Операции ведущего Для осуществления передачи данных через блок SPI, сконфигурированный в качестве ведущего,'рекомендуется использовать следующую последователь- ность операций. При этом предполагается, что любая предшествующая переда- ча данных уже завершена. 1. Задать в регистре счетчика синхроимпульсов SPI желаемую тактовую частоту. 2. Задать в регистре управления SPI желаемые параметры настройки. 3. Записать подлежащие передаче данные, в регистр данных SPI. Эта запись инициирует передачу данных через SPI.
13.3. Детализация периферии SPI 251 4. Ожидать установки бита SPIF в регистре состояния SPI. Бит SPIF будет ав- томатически установлен после завершения последнего цикла передачи дан- ных через SPI. 5. Прочитать регистр состояния SPI. 6. Прочитать принятые через SPI данные путем чтения регистра данных, ес- ли это необходимо, т. е. если требуется произвести не только передачу, но и прием. 7. Вернуться к выполнению пункта 3, если имеются еще данные, подлежащие передаче. Обратите внимание, что чтение или запись регистра данных SPI требуются, чтобы сбросить бит SPIF в регистре состояния. Поэтому, если нет необходимос- ти читать регистр данных SPI (прием не производится), то бит SPIF сбросится только при записи в регистр новых данных. 13.3.3. Операции ведомого Для осуществления передачи данных через блок SPI, сконфигурирован- ный в качестве ведомого, рекомендуется использовать приведенную ниже пос- ледовательность операций. При этом предполагается, что любая предшествую- щая передача данных уже завершена. Предполагается также, что системная тактовая частота, используемая в качестве задающей для логических схем SPI ведомого, не меньше, чем частота синхроимпульсов SPI ведущего, умножен- ная на 8. 1. Задать в регистре управления SPI желаемые параметры настройки. 2. Записать данные, подлежащие передаче, в регистр данных SPI, если это не- обходимо, т. е. требуется произвести не только прием, но и передачу. Эта за- пись не означает, что немедленно начнется процесс передачи данных через SPI (передача инициируется ведущим устройством). Необходимо отметить, что запись в регистр данных SPI должна быть произведена до того, как веду- щее устройство инициирует передачу. 3. Ожидать установки бита SPIF в регистре состояния SPI. Бит SPIF будет ав- томатически установлен по последнему тактовому перепаду (положительно- му или отрицательному, в зависимости от настроек модуля SPI) сигнала SCK, синхронизирующего процесс выборки данных для передачи. 4. Прочитать регистр состояния SPI. 5. Прочитать принятые через SPI данные путем чтения регистра данных, ес- ли это необходимо, т. е. требуется произвести не только передачу, но и прием. 6. Вернуться к выполнению пункта 2, если имеются еще данные, подлежащие передаче. Обратите внимание: чтобы сбросить бит SPIF в регистре состояния, требу- ется произвести чтение илй запись регистра данных SPI. Поэтому всегда необ- ходимо или прочитать регистр данных, или произвести запись в него.
252 Глава 13. Интерфейс SPI 13.3.4. Условия возникновения исключительных ситуаций SPI При осуществлении обмена через SPI возможно возникновение исклю- чительной ситуации, т. е. ситуации, когда происходит какая-либо некор- ректная операция, приводящая к потере данных или другим нежелатель- ным последствиям. Исключительные ситуации блока SPI могут быть следу- ющими. Переполнение при чтении. Происходит, когда внутренний приемный буфер блока SPI содержал данные, которые не были прочитаны процессором до за- вершения следующей передачи данных. Указанием на то, что приемный буфер содержит достоверные данные, служит текущее активное состояние бита SPIF в регистре состояния. Когда передача завершается, блок SPI автоматически пере- мещает принятые данные в приемный буфер. Если в этот момент бит SPIF на- ходится в активном состоянии, то при перемещении новых данных в приемный буфер находящиеся там старые данные будут «затерты» (потеряны). На пере- полнение при чтении указывает бит ROVR в регистре состояния, который в описываемой ситуации перейдет в активный уровень. Конфликт записи. Как уже было сказано выше, между интерфейсом шины блока SPI и внутренним сдвиговым регистром SPI отсутствует какой-либо ап- паратный буфер. В связи с этим, данные не должны записываться в регистр данных SPI в то время, когда через SPI производится передача данных. Ин- тервал времени, во время которого данные нельзя записывать в регистр дан- ных, отсчитывается от момента начала передачи, т. е. от момента последней записи в регистр данных до момента чтения регистра состояния, в котором бит SPIF находился в активном уровне. Если запись в регистр данных SPI бу- дет произведена в течение указанного интервала, то данные записи будут по- теряны, а в регистре состояния перейдет в активный уровень бит конфликта записи WCOL. Ошибка режима. Внешний сигнал на входе SSEL устройства, у которого блок SPI сконфигурирован как ведущий, всегда должен иметь неактивный (ВЫСО- КИЙ) уровень. Если сигнал на входе SSEL ведущего устройства станет актив- ным, то это означает, что другой ведущий выбрал данное устройство в качестве ведомого. Такое состояние для выбранного устройства называется ошибкой ре- жима. В случае возникновения ошибки режима, бит ошибки режима MODF в регистре состояния переходит в активный уровень, драйверы сигналов SPI деак- тивируются и режим блока SPI выбранного устройства изменяется с ведущего на ведомый. Аварийное прекращение работы ведомого. Передача через SPI ведомого уст- ройства считается прерванной, если внешний сигнал SSEL переходит в неак- тивный (ВЫСОКИЙ) уровень прежде, чем передача будет закончена. В слу- чае аварийного прекращения работы ведомого передаваемые и принимаемые данные текущего обмена будут потеряны, а в регистре состояния ведомого пе- рейдет в активный уровень бит аварийного прекращения работы ведомого ABRT.
13.4. Описание выводов SPI 253 13.4. Описание выводов SPI Описание выводов блока SPI микроконтроллеров семейства LPC2000 при- ведено в Табл. 13.2. Таблица 13.2. Описание выводов SPI Название вывода Ъш Описание SCK1, SCK0 I/O Последовательный синхросигнал. Синхросигнал SPI, по определе- нию, синхронизирует передачу данных через SPL Синхросигнал SPI всегда передается (генерируется) ведущим устройством и при- нимается ведомым. Синхросигнал может быть запрограммирован с активным ВЫСОКИМ или активным НИЗКИМ уровнем. Выход синхросигнала активен только во время передачи данных. В любое другое время этот выход может быть в неактивном или высокоим- пендансном состоянии SSEL1, SSEL0 I Выбор ведомого. Сигнал выбора ведомого SPI имеет активный НИЗКИЙ уровень, который указывает, что ведомое устройство в текущий момент выбрано, чтобы участвовать в обмене данными. Каждое ведомое устройство имеет отдельный вход SSEL, благодаря чему ведущее устройство может выбирать одного из нескольких ве- домых, подключенных к одной и той же шине SPI. Сигнал на входе SSEL ведомого должен перейти в НИЗКИЙ уровень до того, как начнется обмен данными и в нормальном режиме остается в НИЗ- КОМ уровне в течение всего времени обмена. Если сигнал SSEL переходит в ВЫСОКИЙ уровень в любой момент в ходе передачи данных, передача считается прерванной. В этом случае, ведомое ус- тройство возвращается в пассивный режим ожидания, а принимае- мые и передаваемые данные теряются. Выход SSEL ведущего устройства не имеет аппаратного управления в блоке SPI, а управляется программно, поэтому в ведущем микро- контроллере в качестве выхода SSEL необходимо использовать ли- нию ввода/вывода общего назначения. Примечание. На вход SSEL сконфигурированного как ведущее уст- ройство блока SPI микроконтроллеров семейства LPC2000 необхо- димо подать внешний ВЫСОКИЙ уровень. В противном случае, возникнет исключительная ситуация, которая называется «аварий- ным прекращением работы ведомого». MISOl.MISOO I/O Вход ведущего, выход ведомого. Линия сигнала MISO — однона- правленная линия, по которой последовательные данные переда- ются от ведомого к ведущему устройству. Когда устройство явля- ется ведомым, последовательные данные выводятся через эту линию. Когда устройство является ведущим, последовательные данные поступают через эту линию. Когда ведомое устройство не выбрано, его выход MISO находится в высокоимпедансном со- стоянии MOSIl.MohlO - I/O Выход ведущего, вход ведомого. Линия сигнала MOSI — однона- правленная линия, по которой последовательные данные переда- ются от ведущего к ведомому устройству. Когда устройство являет- ся ведущим, последовательные данные выводятся через эту линию. Когда устройство является ведомым, последовательные данные поступают через эту линию
254 Глава 13. Интерфейс SPI 13.5. Описание регистров SPI Блок SPI микроконтроллеров семейства LPC2000 включает в себя пять ре- гистров, перечисленных в Табл. 13.3. Все регистры доступны как байт, полусло- во или полное слово. Таблица 13.3. Карта регистров блока SPI Обобщенное название Описание Доступ Значение после сброса1* Адрес и название SPIO SPI1 SPCR Регистр управления SPI. Управляет опе- рациями блока SPI R/W 0 0хЕ0020000 SOSPCR ОхЕООЗОООО S1SPCR SPSR Регистр состояния SPI. Отображает со- стояние блока SPI RO 0 0хЕ0020004 S0SPSR 0хЕ0030004 S1SPSR SPDR Регистр данных SPI. Обеспечивает пере- дачу и прием данных через SPI. Передача данных через SPI происходит, если про- изводится запись в этот регистр. Данные, принятые через SPI, могут быть прочита- ны путем чтения этого регистра R/W 0 0хЕ0020008 S0SPDR 0хЕ0030008 S1SPDR SPCCR Регистр счетчика синхроимпульсов SPI. Задает частоту синхроимпульсов SCK ве- дущего устройства R/W 0 0хЕ002000С S0SPCCR ОхЕООЗОООС S1SPCCR SPINT Регистр флага прерывания от SPI. Содер- жит флаг прерывания от интерфейса SPI R/W 0 0хЕ002001С S0SPINT 0хЕ003001С S1SPINT Значение после сброса относится к данным, сохраненным только в используемых битах. Значения зарезервированных битов не учитываются. Регистр управления SPI (SOSPCR — 0хЕ0020000, S1SPCR — ОхЕООЗОООО) Регистр SPCR управляет операциями блока SPI в соответствии со значения- ми битов конфигурации. Битовая структура регистра SPCR приведена в Ткбл. 13.4. Таблица 13.4. Биты регистра управления SPI (SOSPCR — 0хЕ0020000, S1SPCR- ОхЕООЗОООО) Биты регистра SPCR Название Описание Значение после сброса 2:0 Зарезер- вирова- ны Пользовательское программное обеспечение не должно про- изводить запись в зарезервированные биты. Чтение зарезер- вированного бита возвращает неопределенное значение NA 3 СРНА Бит управления фазой синхроимпульсов. Определяет вре- менное соотношение между синхросигналом и данными при передаче через канал SPI, а также моменты начала и окончания передачи ведомого устройства. 1: когда этот бит установлен, выборка данных производит- ся по спаду синхроимпульса SCK. Передача начинается по фронту первого синхроимпульса и заканчивается по спаду последнего синхроимпульса SCK, которыми осу- ществляется выборка данных для передачи, если сигнал SSEL для данного устройства активен. 0: когда этот бит сброшен, выборка данных производится по фронту синхроимпульса SCK. Передача начинается и заканчивается, соответственно, в моменты активации и снятия сигнала SSEL для данного устройства .0 4 CPOL Бит управления полярностью синхросигнала. 1: когда бит установлен, сигнал SCK имеет НИЗКИЙ активный уровень. 0: когда бит сброшен, сигнал SCK имеет ВЫСОКИЙ активный уровень 0
13.5. Описание регистров SPI 255 Таблица 13.4. Биты регистра управления SPI (SOSPCR — ОхЕООЮООО, S1SPCR — ОхЕООЗОООО) (продолжение) Биты регистра SPCR Название Описание Значение после сброса 5 MSTR Бит выбора режима ведущего. 1: когда этот бит установлен, блок SPI работает в режиме ведущего. 0: когда этот бит сброшен, блок SPI работает в режиме ве- домого 0 6 LSBF Бит управления очередностью передачи через SPI битов в байте. 1: когда этот бит установлен, при передаче данных через SPI, первым передается LSB (бит 0). 0: когда этот бит сброшен, при передаче данных через SPI, первым передается MSB (бит 7) 0 7 SPIE Разрешение прерывания от SPI. 1: когда этот бит установлен, каждый раз при переходе в активный уровень бита SPIF или бита MODF регистра SPSR генерируется аппаратное прерывание. 0: когда этот бит сброшен, прерывания от SPI запрещены 0 Регистр состояния SPI (SOSPSR - 0хЕ0020004, S1SPSR - 0хЕ0030004) Регистр SPSR отображает текущее состояние блока SPI. Этот регистр досту- пен только для чтения. Битовая структура регистра SPSR приведена в Табл. 13.5. Таблица 13.5. Биты регистра состояния SPI (SOSPSR — 0хЕ0020004, S1SPSR — 0хЕ0030004) Биты регистра SPSR Название Описание Значение после сброса 2:0 Зарезер- вирова- ны Пользовательское программное обеспечение не должно про- изводить запись в зарезервированные биты. Чтение зарезер- вированного бита возвращает неопределенное значение NA 3 ABRT Бит аварийного прекращения работы ведомого. Установка этого бита является сигналом того, что произошло аварий- ное прекращение работы ведомого. Этот бит сбрасывается путем чтения регистра SPSR 0 4 MODF Бит ошибки режима. Установка этого бита является сигна- лом того, что произошла ошибка режима. Этот бит сбрасы- вается путем чтения регистра SPSR и последующей записи в регистр управления SPI 0 5 ROVR Бит переполнения при чтении. Установка этого бита явля- ется сигналом того, что произошло переполнение при чте- нии. Этот бит сбрасывается путем чтения регистра SPSR 0 6 WCOL Бит конфликта записи. Установка этого бита является сиг- налом того, что произошел конфликт записи. Этот бит сбрасывается путем чтения регистра SPSR и последующего обращения к регистру данных SPI 0 7 SPIF Флаг окончания передачи через SPI. Установка этого флага сигнализирует о том, что процесс передачи данных через SPI закончен. Когда устройство является ведущим, флаг устанавливается в конце последнего цикла передачи. Когда устройство является ведомым, флаг устанавливается по то- му тактовому перепаду (фронту или спаду, в зависимости от настроек модуля SPI) сигнала SCK, которым осущест- вляется выборка последнего бита данных. Этот флаг сбра- сывается при первом же чтении регистра SPSR и последу- ющем обращении к регистру данных SPI. Примечание. Этот флаг не является флагом прерывания от SPI. Последний находится в регистре SPINT. 0
256 Глава 13. Интерфейс SPI Регистр данных SPI (SOSPDR — 0хЕ0020008, S1SPDR— 0хЕ0030008) Этот двунаправленный регистр обеспечивает передачу и прием данных SPL Данные, подлежащие передаче через SPI, записываются в регистр. Данные, при- нятые через SPI, могут быть прочитаны из регистра. Когда устройство является ведущим, запись в этот регистр инициирует передачу данных через SPI. Запись в этот регистр не приведет к инициации передачи в том случае, если бит SPIF в ре- гистре состояния был установлен и регистр состояния не был прочитан. Битовая структура регистра SPDR приведена в Табл. 13.6. Таблица 13.6. Биты регистра данных SPI (SOSPDR — 0хЕ0020008, S1SPDR — 0хЕ0030008) Биты регистра SPDR Функция бита Описание Значение после сброса 7:0 Данные Двунаправленный порт данных SPI 0 Регистр счетчика синхроимпульсов SPI (SOSPCCR - 0хЕ002000С, S1SPCCR - ОхЕООЗОООС) Этот регистр управляет значением частоты SCK ведущего устройства. Ре- гистр содержит количество циклов pclk, которое составляет один цикл синхро- сигнала SPL Значение этого регистра всегда должно быть четным числом, т. е. бит 0 регистра всегда должен быть сброшен. Значение регистра также всегда должно быть больше или равно 8. Несоблюдение этих условий может привести к непредсказуемому поведению блока SPI. Битовая структура регистра SPCCR приведена в Табл. 13.7. Таблица 13.7. Биты регистра счетчика синхроимпульсов SPI (SOSPCCR — 0хЕ002000С, S1SPCCR - ОхЕООЗОООС) Биты регистра SPCCR Функция бита Описание Значение после сброса 7:0 Счетчик Значение счетчика синхроимпульсов SPI 0 Абсолютное значение задающей частоты SPI может быть рассчитано как от- ношение: pclk / значение регистра SPCCR, где значение pclk равцо отношению: cclk / значение регистра делителя VPBDIV. Регистр прерывания otSPI (SOSPINT— 0хЕ002001С, S1SPINT—0хЕ003001С) Этот регистр содержит флаг прерывания от интерфейса SPI. Битовая структура регистра SPINT приведена в Табл. 13.8.
13.5. Описание регистров SPI 257 Таблица 13.8. Биты регистра прерывания от SPI (S0SPINT — 0хЕ002001С, S1SPINT — 0хЕ003001С) Биты регистра SPINT Функция бита Описание Значение после сброса 0 Преры- вание от SPI Флаг прерывания от SPI. Этот флаг устанавливается аппа- ратно при генерации прерывания от SPI. Чтобы сбросить этот флаг, в него программным путем следует записать ло- гическую 1 (после чего он автоматически будет аппаратно сброшен в 0). Примечание. Этот флаг будет установлен один раз, когда устанавливаются бит SPIE и хотя бы один из битов SPIF или WCOL. Но лишь в том случае, когда бит прерывания от SPI установлен, и прерывание от SPI разрешено в VIC, прерывание от SPI может быть обработано программным обработчиком. 0 7:1 Зарезер- вирова- ны Пользовательское программное обеспечение не должно производить запись в зарезервированные биты. Чтение за- резервированного бита возвращает неопределенное значе- ние NA 304
ГЛАВА 1 4 КОНТРОЛЛЕРЫ CAN И ПРИЕМНЫЕ ФИЛЬТРЫ Интерфейс Controller Area Network (CAN) реализует протокол последова- тельной передачи данных, который эффективно поддерживает распределенное управление в реальном времени с очень высоким уровнем безопасности. Об- ласть приложений интерфейса CAN ориентирована, в первую очередь, на высо- коскоростные сети и специализированные системы передачи данных. Блок CAN микроконтроллеров семейства LPC2000 предназначен для под- держки нескольких шин CAN одновременно, позволяя использовать микро- контроллер как шлюз, вентиль или маршрутизатор, подключенный к несколь- ким шинам CAN в индустриальных или автомобильных приложениях. 14.1. Отличительные особенности контроллеров CAN семейства LPC2000 Каждый контроллер CAN имеет регистр, структура которого подобна ана- логичным по выполняемым функциям регистрам микроконтроллеров Philips SJA1000 и PeliCAN Library block. В отличие от названных устройств, в микро- контроллерах LPC2000 8-битные регистры скомбинированы в 32-битные слова, чтобы обеспечить доступ к ним в среде ARM. Главная же эксплуатационная особенность контроллера CAN LPC2000 состоит в том, что распознавание при- нятых идентификаторов, называемое в терминологии CAN фильтрацией при- ема, удалено из контроллеров CAN и централизованно размещено в глобаль- ном приемном фильтре. Описание этого приемного фильтра приведено в дан- ной главе после описания контроллеров CAN. Контроллеры CAN-устройств семейства LPC2000 имеют следующие основ- ные характеристики: • 2 или 4 (в зависимости от серии микроконтроллера) контроллера CAN и шины (2 в микроконтроллерах в 64-выводном корпусе и 2 или 4 в микро- контроллерах вД44-выводном корпусе); • скорость передачи данных до 1 Мбит/с по каждой шине; • 32-битный регистр и доступ к оперативной памяти; • интерфейс CAN, совместимый со спецификацией 2.0В, ISO 11898-1; • глобальный приемный фильтр распознает 11- и 29-битные принимаемые идентификаторы для всех шин CAN; • приемный фильтр CAN обеспечивает автоматическое распознавание в стиле FuIlCAN выбранных стандартных идентификаторов.
14.2. Описание выводов CAN 259 14.2. Описание выводов CAN Выводы, относящиеся к контроллерам CAN микроконтроллеров семейства LPC2000, перечислены в Табл. 14.1. Таблица 14.1. Выводы CAN микроконтроллеров LPC2000 Название выводов Направление выводов Описание выводов RX4-1 Входы Последовательные входы. Подключены к приемопередатчикам CAN. Примечание. RX2 и RX1 доступны во всех микроконтроллерах, в состав которых входят контроллеры CAN. RX4 и RX3 доступны только в микро- контроллерах LPC2194/2294. 1X4-1 Выходы Последовательные выходы. Подключены к приемопередатчикам CAN. Примечание. ТХ2 и 1X1 доступны во всех микроконтроллерах, в состав ко- торыхвходят контроллеры CAN. ТХ4 и 1X3 доступны только в микрокон- троллерах LPC2194/2294. 14.3. Карта памяти блока CAN Контроллеры CAN и приемный фильтр занимают некоторое количество VPB-слотов, которые перечислены в Табл. 14.2. Таблица 14.2. Карта памяти блока CAN Адресный интервал Используется для E0038000...87FF ОЗУ приемного фильтра Е003С000...С017 Регистры приемного фильтра Е0040000...000В Центральные регистры CAN E0044000...405F Регистры контроллера CAN 1 E0048000...805F Регистры контроллера CAN 2 E004C000...C05F Регистры контроллера CAN 3 (только в микроконтроллерах LPC2194/2294) E0050000...005F Регистры контроллера CAN 4 (только в микроконтроллерах LPC2194/2294) 14.4. Регистры контроллера CAN Регистры блока CAN перечислены в Табл. 14.3, Табл. 14.4. Более детальные их описания даны ниже. В таблицах в столбце «Значение после сброса», даны значения каждого бита или поля после аппаратного сброса, а в столбце «Уста- новка RM» — значения каждого бита или поля в случае, если программное обеспечение устанавливает бит RM, или если бит RM установлен из-за условий на шине. Обратите внимание на то, что в случае, когда аппаратный сброс уста- навливает бит RM, то значение, указанное в столбце «Значение после сброса», преобладает над значением, указанным в столбце «Установка RM» (если они не совпадают). В обоих этих столбцах знак «X» указывает на то, что данный бит или поле остаются неизменными.
260 Глава 14. Контроллеры CAN и приемные фильтры Таблица 14.3. Регистры приемного фильтра CAN и центральные регистры блока CAN Название Описание Доступ Значение после сброса Адрес AFMR Регистр режима приемного фильтра R/W 1 ОхЕООЗ СООО SFF.sa Регистр начального адреса стандартного индивидуального фрейма R/W 0 ОхЕООЗ С004 SFF_GRP_sa Регистр начального адреса стандартного группового фрейма R/W 0 ОхЕООЗ С008 EFF_sa Регистр начального адреса расширенного фрейма R/W 0 ОхЕООЗ C00C EFF_GRP_sa Регистр начального адреса расширенного группового фрейма R/W 0 ОхЕООЗ СОЮ ENDofTable Регистр конца таблицы приемного фильтра R/W 0 ОхЕООЗ СО 14 LUTerrAd Регистр адреса ошибки LUT RO 0 ОхЕООЗ СОЮ LUTerr Регистр ошибки LUT RO 0 ОхЕООЗ С01С CANTxSR Центральный регистр состояния передачи CAN RO 0x003F 3F00 0хЕ004 0000 CANRxSR Центральный регистр состояния приема CAN RO 0 0хЕ004 0004 CANMSR Центральный универсальный регистр состоя- ния CAN RO 0 0хЕ004 0008 Таблица 14.4. Карта регистров контроллеров CAN1, CAN2, CAN3 и CAN4 Обобщенное название Описание Доступ Адрес и название CAN1 CAN2 CAN3 CAN4 CANMOD Управляет операци- онным режимом контроллера CAN R/W 0xE004 4000 C1MOD 0xE004 8000 C2MOD 0xE004 C000 C3MOD 0xE005 0000 C4MOD CANCMR Содержит командные биты, которые отоб- ражают состояние контроллера CAN WO 0xE004 4004 C1CMR 0xE004 8004 C2CMR 0xE004 C004 C3CMR 0xE005 0004 C4CMR CANGSR Глобальный регистр состояния контрол- лера и счетчиков ошибок RO° 0xE004 4008 C1GSR 0xE004 8008 C2GSR 0xE004 C008 C3GSR 0xE005 0008 C4GSR CANICR Регистр захвата и прерываний RO 0xE004 400C C1ICR 0xE004 800C C2ICR 0xE004 C00C C3ICR 0xE005 000C C4ICR CANIER Регистр разрешения прерывания* R/W 0xE004 4010 CHER 0xE004 8010 C2IER 0xE004 CO 10 C3IER 0xE005 0010 C4IER CANBTR Регистр временных интервалов шины r/w2) 0xE004 4014 C1BTR 0xE004 8014 C2BTR 0xE004 C014 C3BTR 0xE005 0014 C4BTR CANEWL Регистр предупреж- дения о лимите ошибок R/W2* 0xE004 4018 C1EWL 0xE004 8018 C2EWL 0xE004 CO 18 C3EWL 0xE005 0018 C4EWL CANSR Регистр состояния RO 0xE004 401C C1SR 0xE004 801C C2SR 0xE004 C01C C3SR 0xE005 001C C4SR
14.4. Регистры контроллера CAN 261 Таблица 14.4. Карта регистров контроллеров CAN1, CAN2, CAN3 и CAN4 (продолжение) Обобщенное название Описание Доступ Адрес и название CAN1 CAN2 CAN3 CAN4 CANRFS Регистр состояния принятого фрейма r/w2) 0xE004 4020 C1RFS 0xE004 8020 C2RFS 0xE004 C020 C3RFS бэ®005 0020 C4RFS CANRID Регистр принятого идентификатора r/w2) 0xE004 4024 Cl RID 0xE004 8024 C2RID 0xE004 C024 C3RID 0xE005 0024, C4RID CANRDA Принятые байты данных 1...4 r/w2> 0xE004 4028 C1RDA 0xE004 8028 C2RDA 0xE004 C028 C3RDA 0xE005 0028 C4RDA CANRDB Принятые байты данных 5... 8 r/w2) 0xE004 402C C1RDB 0xE004 802C C2RDB 0xE004 C02C C3RDB 0xE005 002C C4RDB CANTFI1 Информация о пере- даваемом фрейме (1) R/W 0xE004 4030 C1TFI1 0xE004 8030 C2TFI1 0xE004 C030 C3TFI1 0xE005 0030 C4TFI1 CANTID1 Передаваемый идентификатор (1) R/W 0xE004 4034 C1TID1 0xE004 8034 C2TID1 0xE004 C034 C3TID1 0xE005 0034 C4TID1 CANTDA1 Передаваемые байты данных 1...4 (1) R/W 0xE004 4038 C1TDA1 0xE004 8038 C2TDA1 0xE004 C038 C3TDA1 0xE005 0038 C4TDA1 CANTDB1 Передаваемые байты данных 5...8 (1) R/W 0xE004 403C C1TDB1 0xE004 803C C2TDB1 0xE004 C03C C3TDB1 0xE005 003C C4TDB1 CANTFI2 Информация о пере- даваемом фрейме (2) R/W 0xE004 4040 C1TFI2 0xE004 8040 C2TFI2 0xE004 C040 C3TFI2 0xE005 0040 C4TFI2 CANTID2 Передаваемый иден- тификатор (2) R/W 0xE004 4044 C1TID2 0xE004 8044 C2TID2 0xE004 C044 C3TID2 0xE005 0044 C4TID2 CANTDA2 Передаваемые байты данных 1...4 (2) R/W 0xE004 4048 C1TDA2 0xE004 8048 C2TDA2 0xE004 C048 C3TDA2 0xE005 0048 C4TDA2 CANTDB2 Передаваемые байты данных 5...8 (2) R/W 0xE004 404C C1TDB2 0xE004 804C C2TDB2 0xE004 C04C C3TDB2 0xE005 004C C4TDB2 CANTFI3 Информация о пере- даваемом фрейме (3) R/W 0xE004 4050 C1TFI3 0xE004 8050 C2TFI3 0xE004 C050 C3TFI3 0xE005 0050 C4TFI3 CANTID3 Передаваемый иден- тификатор (3) R/W 0xE004 4054 C1TID3 0xE004 8054 C2TID3 0xE004 C054 C3TID3 0xE005 0054 C4TID3 CANTDA3 Передаваемые байты данных 1...4 (3) R/W 0xE004 4058 C1TDA3 0xE004 8058 C2TDA3 0xE004 C058 C3TDA3 0xE005 0058 C4TDA3 CANTDB3 Передаваемые байты данных 5...8 (3) R/W 0xE004 405C C1TDB3 0xE004 805C C2TDB3 0xE004 C05C C3TDB3 0xE005 005C C4TDB3 ° Запись в счетчики ошибок может быть произведена только тогда, когда установлен бит RM в регистре CANMOD. 2) Запись в эти регистры может быть произведена только тогда, когда установлен бит RM в ре- гистре CANMOD. * Регистр режима (CANMOD — ОхЕООххООО) Битовая структура регистра CANMOD приведена в Табл. 14.5. Регистр пред- назначен для управления основным операционным режимом контролера CAN. Чтение не указанных в таблице битов этого регистра возвращает значение 0, и в эти биты должны быть записаны нули. Конкретный адрес регистра CANMOD (в зависимости от его принадлежности к одному из четырех возможных для микроконтроллера LPC2000 контроллеров CAN) см. в Табл. 14.4.
262 Глава 14. Контроллеры CAN и приемные фильтры Таблица 14.5. Биты регистра режима CAN (CANMOD — ОхЕООх хООО) Биты CANMOD Название Описание Значение после сброса Установка RM 0 RM 0: Контроллер CAN работает в «защищенном ре- жиме», т. е. запись в некоторые регистры не может быть произведена. 1: Режим сброса — операции CAN заблокированы и в доступные для записи регистры может быть произведена запись 1 1 1 LOM 0: CAN-контроллер после успешного приема каж- дого сообщения по шине CAN выставляет в линию соответствующий сигнал подтверждения. 1: Пассивный режим («слушания») — контроллер не дает никакого подтверждения через CAN, даже если сообщение успешно принято. Отправка сообщений заблокирована и контроллер находится в режиме «пассивной ошибки» («Error Passive mode» — конт- роллер CAN может передавать только пассивные фреймы ошибки, содержащие пассивный флаг ошибки, состоящий из рецессивных1) битов). Этот режим предназначен также для программной оцен- ки скорости обмена и «горячего подключения» 0 X 2 STM 0: Требуется подтверждение о приеме переданного в линию сообщения со стороны других подключен- ных к шине устройств. В противном случае, сооб- щение считается переданным с ошибкой и будет отправлено повторно. 1: Режим самотестирования — контроллер рас- сматривает сообщение как успешно отправленное, даже при отсутствии подтверждения. Рекомендует- ся при использовании этого режима устанавливать также бит SRR в регистре CANCMR 0 X 3 ТРМ 0: Приоритет каждого из трех буферов передачи определяется в соответствии со значениями их CAN-идентификаторов. 1: Приоритет каждого из трех буферов передачи определяется в соответствии со значениями их по- лей приоритета передачи (PRIO в регистре CANTFI) 0 X 4 SM 0: Контроллер CAN работает в нормальном режиме. 1: Спящий режим — контроллер CAN «спит», если он не запрашивает прерывание и нет актив- ности на шине CAN 0 0 5 RPM 0: НИЗКИЙ уровень на выводах RX и ТХ для доминантного1) бита. 1: Режим обратной полярности — ВЫСОКИЙ уро- вень на выводах RX и ТХ для доминантногого бита 0 0 7 ТМ 0: Нормальная операция 1: Режим тестирования. Состояние вывода RX определяется состоянием вывода ТХ 0 0 ° В описании протокола CAN используются понятия «доминантный бит» и «рецессивный бит». По умолчанию доминантный бит имеет значение НИЗКОГО уровня и «затирает» любое ко- личество рецессивных битов (по умолчанию имеющих значение ВЫСОКОГО уровня). То есть, если одно из участвующих в процессе обмена устройств выставило на шину CAN доминантный бит (0), а одно или несколько других — рецессивный (1), то текущее состояние шины будет опре- деляться доминантным битом. (Прим. науч, ред.) Примечание. Состояние битов LOM и STM может быть изменено только в случае, когда бит RM установлен до начала операции записи.
14.4. Регистры контроллера CAN 263 Регистр команды (CANCMR — ОхЕООх х004) Битовая структура регистра CANCMR приведена в Табл. 14.6. Запись в этот доступный только для записи регистр инициирует какое-либо действие конт- роллера. В биты этого регистра, которые не перечислены в таблице, должны быть записаны нули. Чтение регистра возвращает нулевое значение. Конкрет- ный адрес регистра CANCMR (в зависимости от его принадлежности к одному из четырех возможных для микроконтроллера LPC2000 контроллеров CAN) см. в Табл. 14.4. Таблица 14.6. Биты регистра команды CAN (CANCMR — ОхЕООх х004) Биты CANCMR Название Функция 0 TR 1: Запрос передачи — сообщение, предварительно записанное в регистры CANTFI, CANTID и, возможно, в регистры CANTDA, CANTDB, поставлено в очередь для передачи 1 АТ 1: Передача аварийного прекращения работы — ожидающий обра- ботки запрос передачи отменен, если он еще не обрабатывается. Если этот бит и бит TR установлены одной и той же операцией записи, то передача фрейма производится однократно и повторная передача не предпринимается даже в случае, если устанавливается флаг ошибки или теряется арбитраж 2 RRB 1: Выгрузка приемного буфера — информация, содержащаяся в регистрах CANRFS, CANRID, а также в регистрах CANRDA, CANRDB, если последние используются в приложении, выгружа- ется, после чего эти регистры готовы для размещения следующего принятого фрейма. Если следующий принятый фрейм недосту- пен, то запись этой команды сбрасывает бит RBS в регистре CANSR 3 CDO 1: Сброс переполнения данных — бит переполнения данных в регистре CANSR сбрасывается 4 SRR 1: Автозапрос приема — сообщение, предварительно записанное в регистры CANTFS, CANTID и, возможно, в регистры CANTDA, CANTDB, поставлено в очередь для передачи. Отличие этого бита от бита TR состоит в том, что приемник не отключается в ходе пе- редачи, так что сообщение принимается, если его идентификатор распознан приемным фильтром 5 STB1 1: Выбрать буфер Тх 1 для передачи 6 STB2 1: Выбрать буфер Тх 2 для передачи 7 STB3 1: Выбрать буфер Тх 3 для передачи Глобальныйрегистр состояния (CANGSR — ОхЕООх х008) Битовая структура регистра CANGSR приведена в Табл. 14.7. Этот регистр доступен только для чтения, за исключением того, что в счетчики ошибок мо- жет быть произведена запись, если установлен бит RM в регистре CANMOD. Чтение не указанных в таблице битов этого регистра возвращает значение 0, и в эти биты должны быть записаны нули. Конкретный адрес регистра CANGSR (в зависимости от его принадлежности к одному из четырех возможных для мик- роконтроллера LPC2000 контроллеров CAN) см. в Табл. 14.4.
264 Глава 14. Контроллеры CAN и приемные фильтры Таблица 14.7. Биты глобального регистра состояния CAN (CANGSR — ОхЕООх х008) Биты CANGSR Название Описание Значение после сброса Установка RM 0 RBS 1: Состояние приемного буфера — принятое сооб- щение доступно в регистрах CANRFS, CAN RID и в регистрах CANRDA, CANRDB (если последние используются в приложении). Этот бит сбрасывает- ся командой выгрузки приемного буфера в регистре CANCMR, если отсутствует следующее принятое сообщение 0 0 1 DOS 1: Состояние переполнения данных — сообщение было потеряно, потому что предыдущее сообщение не было прочитано контроллером CAN и не было выгружено достаточно быстро. 0: Никакого переполнения данных не произошло с тех пор, как последняя команда очистки перепол- нения данных была записана в регистр CANCMR (или после сброса) 0 0 2 TBS 1: Состояние буфера передачи — не передается сообщение, содержащееся в CAN-контроллере (в любом из трех буферов Тх), и возможна програм- мная запись в любой из регистров CANTFI, CANTID, CANTDA и CANTDB. 0: Поскольку, по крайней мере, одно предваритель- но поставленное в очередь сообщение CAN-koht- роллер еще не передал, то пользовательская програ- ма не должна производить запись в регистры CANTFI, CANTID, CANTDA, CANTDB этого буфера Тх 1 X 3 TCS 1: Состояние завершения передачи — все требуе- мые передачи успешно закончены. 0: По крайней мере, одна требуемая передача не была успешно закончена 1 0 4 RS 1: Состояние приема: CAN-контроллер принимает сообщение 0 0 5 TS 1: Состояние передачи: CAN-контроллер передает сообщение 0 0 6 ES 1: Состояние ошибки: содержимое одного или обо- их счетчиков ошибок передачи и приема достигло значения, предварительно записанного в регистре предупреждения о лимите ошибок 0 0 7 BS 1: Состояние отключения шины: CAN-контроллеру в настоящее время запрещена деятельность на ши- не, потому что значение счетчика ошибок передачи достигло 255 (предельно возможная величина) 0 0 23:16 RXERR Текущее значение счетчика ошибок приема 0 X 31:24 TXERR Текущее значение счетчика ошибок передачи 0 X Регистр захвата и прерываний (CANICR — ОхЕООх хООС) Битовая структура регистра CANICR приведена в Табл. 14.8. Его биты отоб- ражают информацию о событиях на шине CAN. Регистр доступен только для чтения. Биты 1...9 при чтении сбрасываются. Чтение не указанных в таблице битов регистра возвращает значение 0, и в эти биты должны быть записаны ну- ли. Конкретный адрес регистра CANICR (в зависимости от его принадлежнос- ти к одному из четырех возможных для микроконтроллера LPC2000 контролле- ров CAN) см. в Табл. 14.4.
14.4. Регистры контроллера CAN 265 Таблица 14.8. Биты регистра захвата и прерываний CAN (CANICR - ОхЕООх хООС) Биты CANICR Название Описание Значение после сброса Установка RM 0 RI 1: Прерывание по приему — этот бит устанавливает- ся всякий раз, когда устанавливается бит RBS в ре- гистре CANSR, указывая, что принятое сообщение является доступным, а бит RIE в регистре CANIER установлен 0 0 1 ТП 1: Прерывание по передаче 1 — этот бит устанавли- вается, когда значение бита TBS1 в регистре CANSR переходит из 0 в 1, указывая, что буфер пе- редачи 1 доступен, а бит TIE1 в регистре CANIER установлен 0 0 2 EI 1: Прерывание по предупреждению об ошибке — этот бит устанавливается при каждом изменении (установке или сбросе) битов состояния ошибки или состояния шины в регистре CANSR, если бит EIE в регистре CANIER был в установленном со- стоянии во время этих изменений 0 X 3 DOI 1: Прерывание по переполнению данных — этот бит устанавливается, когда значение бита DOS в регист- ре CANSR переходит из 0 в 1, а бит DO IE в регистре CANIER установлен 0 0 4 WUI 1: Прерывание по «пробуждению» — этот бит уста- навливается, если в момент, когда CAN-контроллер бездействует, проявляет активность другое подклю- ченное к шине внешнее устройство, а бит WUIE в регистре CANIER установлен 0 0 5 EPI 1: Прерывание по пассивной ошибке — этот бит ус- танавливается, если бит EPIE в регистре CANIER установлен, и CAN-контроллер переключается между режимом «пассивной ошибки» и режимом «активной ошибки» в направлении первого режима 0 0 6 ALI 1: Прерывание по потере арбитража — этот бит ус- танавливается, если CAN-контроллер теряет арбит- раж при попытке передачи, а бит ALIE в регистре CANIER установлен 0 0 7 BEI 1: Прерывание по шинной ошибке - этот бит уста- навливается, если CAN-контроллер обнаруживает шинную ошибку, а бит BEIE в регистре CANIER ус- тановлен 0 X 8 IDI 1: Прерывание по готовности идентификатора — этот бит устанавливается, если через CAN был при- нят идентификатор, а бит IDIE в регистре CANIER установлен 0 0 9 . -TI2 1: Прерывание по передаче 2 — этот бит устанавли- вается, когда значение бита TBS2 в регистре CANSR переходит из 0 в 1, указывая, что буфер пе- редачи 2 доступен, а бит TIE2 в регистре CANIER установлен 0 0 10 TI3 1: Прерывание по передаче 3 — этот бит устанавли- вается, когда значение бита TBS3 в регистре CANSR переходит из 0 в 1, указывая, что буфер пе- редачи 3 доступен, а бит TIE3 в регистре CANIER установлен 0 0
266 Глава 14. Контроллеры CAN и приемные фильтры Таблица 14.8. Биты регистра захвата и прерываний CAN (CANICR — ОхЕООх хООС) (продолжение) Биты CANICR Название Описание Значение после сброса Установка RM 20:16 ERRBIT Код ошибки захвата: когда CAN-контроллер обна- руживает шинную ошибку, ее местоположение в пределах фрейма фиксируется в этом поле. Значе- ние кода содержится во внутренней переменной. 00010: ID28:21. 00011: Начало фрейма. 00100: SRTR6ht. 00101: IDE бит. 00110: ID20:18. 00111: ID17:13. 01000: CRC. 01001: Зарезервированный бит 0. 01010: Поле данных. 01011: DLC. 01100: RTR бит. 01101: Зарезервированный бит 1. ОШО: ID4:0. 01111: ID12:5. 10001: Флаг активной ошибки. 10010: Перерыв. 10011: Доминирующие биты О К. 10110: Флаг пассивной ошибки. 10111: Разделитель ошибки. 11000: CRC разделитель. 11001: Слот подтверждения (Аск). 11010: Конец фрейма. 11011: Аск разделитель. 11100: Флаг переполнения. Чтение этого байта разрешает следующее прерыва- ние от шинной ошибки 0 X 21 ERRDIR Когда CAN-контроллер обнаруживает шинную ошибку, направление следования текущего бита фиксируется в этом бите: 1 = прием, 0 = передача 0 X 23:22 ERRC Когда CAN-контроллер обнаруживает шинную ошибку, тип ошибки фиксируется в этом поле: 00 = bit-ошибка, 01 = Form-ошибка, 10 = Stuff-ошибка, 11 = другая ошибка 0 X 28:24 ALCBIT Каждый раз, когда теряется арбитраж, в то время как производится попытка пересылки через CAN, количество битов в составе фрейма фиксируется в этом поле. Значение 0 указывает на потерю арбит- ража в первом (MS) бите идентификатора,..., зна- чение 31 указывает на потерю арбитража в бите RTR расширенного фрейма. После того, как байт читается, бит ALI в регистре CANICR сбрасывает- ся, и может происходить новое прерывание от поте- ри арбитража CAN 0 X Содержимое битов 16...23 захватывается (фиксируется до тех пор, пока не будет прочитано), когда на шине происходит ошибка. В этот момент, в случае, если бит BEIE в регистре CANIER установлен, в регистре CANICR устанавли- вается бит BEI и может произойти прерывание CAN. Содержимое битов 24...31 захватывается, когда теряется арбитраж CAN. В этот момент, в случае, если бит ALIE в регистре CANIER установлен, в регистре CANICR устанавливается бит ALI и генерация прерывания CAN разрешается.
14.4. Регистры контроллера CAN 267 Как только происходит захват любого из этих байтов (биты 16...23 или 24...31), содержимое байта сохраняется, пока не будет прочитано, с тем, чтобы можно было захватить новое значение. Сброс битов 1...9 и выгрузка битов 16...23 и 24...31 производятся при любой операции чтения регистра CANICR, независимо от того, читается часть регист- ра или весь регистр целиком. Это означает, что программа-пользователь должна всегда при чтении рассматривать регистр CANICR, как 32-битное слово и обраба- тывать в пользовательском приложении все биты регистра как значащие. Регистр разрешения прерываний (CANIER — ОхЕООх х010) Битовая структура регистра CANIER приведена в Табл. 14.9. Регистр досту- пен для чтения и записи и управляет разрешением прерываний от различных событий в контроллере CAN. Биты 7:0 этого регистра соответствуют битам 7:0 регистра CANICR. Конкретный адрес регистра CANIER (в зависимости от его принадлежности к одному из четырех возможных для микроконтроллера LPC2000 контроллеров CAN) см. в Табл. 14.4. Таблица 14.9. Биты регистра разрешения прерываний CAN (CANIER — ОхЕООх х010) Биты CANIER Название Описание Значение после сброса Установка RM 0 RIE Разрешение прерывание по приему 0 X 1 TIE1 Разрешение прерывания по передаче (1) 0 X 2 EIE Разрешение прерывания по предупреждению об ошибке 0 X 3 DOIE Разрешение прерывания по переполнению данных 0 X 4 WUIE Разрешение прерывания от «пробуждения» 0 X 5 EPIE Разрешение прерывания от пассивной ошибки 0 X 6 ALIE Разрешение прерывания от потери арбитража 0 X 7 BEIE Разрешение прерывания от ошибки на шине 0 X 8 IDIE Разрешение прерывания по готовности идентификатора 0 X 9 TIE2 Разрешение прерывания по передаче (2) 0 X 10 TIE3 Разрешение прерывания по передаче (3) 0 X Регистр временных интервалов шины (CANBTR — ОхЕООх х014) Битовая структура регистра CANBTR (Bus Timing Register) приведена в Табл. 14.10. Регистр управляет частотой и другими временными характеристи- ками тактовых сигналов, получаемых из синхросигнала VPB и используемых для синхронизации обмена по интерфейсу CAN. Этот регистр доступен для чте- ния в любое время, но для записи он доступен только в том случае, если уста- новлен бит RM в регистре CANMOD. Конкретный адрес регистра CANBTR (в зависимости от его принадлежности к одному из четырех возможных для мик- роконтроллера LPC2000 контроллеров CAN) см. в Табл. 14.4.
268 Глава 14. Контроллеры CAN и приемные фильтры Таблица 14.10. Биты регистра временных интервалов шины (CANBTR — ОхЕООх х014) Биты CANBTR Название Описание Значение после сброса Установка RM 0:9 BRP Предделитель задания скорости обмена. Значение частоты VPB делится на увеличенное на единицу значение этого поля, в результате чего вырабатыва- ется частота синхронизации CAN 0 X 15:14 SJW Длительность периода синхронизации тактовой частоты CAN равна значению этого поля плюс один 0 X 19:16 TSEG1 Задержка от номинальной точки (момента) синхро- низации до типовой точки (момента) для тактовой частоты CAN равна значению этого поля плюс один 1100 X 22:20 TSEG2 Задержка от типовой точки (момента) синхрониза- ции до следующей номинальной точки (момента) для тактовой частоты CAN равна значению этого поля плюс один. Номинальный интервал бита CAN для тактовой частоты CAN равен: значение TSEG2 плюс значение TSEG1 плюс три 001 X 23 SAM 1: для шины выбран тройной интервал (рекомендо- вано для низко- и среднескоростных шин). 0: для шины выбран однократный интервал (реко- мендовано для высокоскоростных шин) 0 X Регистр предупреждения о лимите ошибок (CANEWL — ОхЕООх хО18) Битовая структура регистра CANEWL приведена в Табл. 14.11. Регистр ус- танавливает лимит (предельную величину) ошибок при приеме и при переда- че, по достижении которого может произойти прерывание CAN. Этот ре- гистр доступен для чтения в любое время, но для записи он доступен только в том случае, если установлен бит RM в регистре CANMOD. Конкретный’ад- рес регистра CANEWL (в зависимости от его принадлежности к одному из че- тырех возможных для микроконтроллера LPC2000 контроллеров CAN) см. в Табл. 14.4. Таблица 14.11. Биты регистра предупреждения о лимите ошибок CAN (CANEWL - ОхЕООх х018) Биты CANEWL Название Описание Значение после сброса Установка RM 7:0 EWL В ходе операций интерфейса CAN это значение постоянно сравнивается со счетчиками ошибок пе- редачи и приема. Если содержимое любого из этих счетчиков достигает значения CANEWL, то уста- навливается бит состояния ошибки (ES) в регистре CANSR 96 = 0x60 X Регистр состояния (CANSR — ОхЕООх хО1 С) Битовая структура регистра CANNSR приведена в Табл. 14.12. Регистр со- держит три байта состояния, в которых биты, не связанные с передачей, иден- тичны соответствующим битам в глобальном регистре состояния, а биты, свя-
14.4. Регистры контроллера CAN 269 занные с передачей, отражают состояние каждого из трех буферов Тх. Чтение не указанных в таблице битов этого регистра возвращает значение 0, и в эти биты должны быть записаны нули. Конкретный адрес регистра CANNSR (в зависи- мости от его принадлежности к одному из четырех возможных для микроконт- роллера LPC2000 контроллеров CAN) см. в Табл. 14.4. Таблица 14.12. Биты регистра состояния CAN (CANSR — ОхЕООх хО1С) Биты CANSR Название Описание Значение после сброса Установка RM 0, 8, 16 RBS Эти биты идентичны биту RSB в регистре CANGSR 0 0 1,9, 17 DOS Эти биты идентичны биту DOS в регистре CANGSR 0 0 2, 10, 18 TBS1, TBS2, TBS3 1: Можно производить программную запись сообщения из регистров CANTFI, CANTID, CANTDA и CANTDB в соответствующий буфер Тх. 0: Нельзя производить программную запись из регистров CANTFI, CANTID, CANTDA и CANTDB в соответствующий буфер Тх 1 X 3, П, 19 TCS1, TCS2, TCS3 1: Предварительно осуществлявшаяся переда- ча из соответствующего буфера Тх была успешно закончена. 0: Предварительно осуществлявшаяся передача из соответствующего буфера Тх не закончена 1 0 4, 12, 20 RS Эти биты идентичны биту RS в регистре CANGSR 0 0 5, 13,21 TS1, TS2, TS3 1: CAN-контроллер передает сообщение из соответствующего буфера Тх 0 0 6, 14, 22 ES Эти биты идентичны биту ES в регистре CANGSR 0 0 7, 15, 23 BS Эти биты идентичны биту BS в регистре CANGSR 0 0 Регистр состояния принятого фрейма (CANRFS — ОхЕООх х020) Битовая структура регистра CANRFS приведена в Табл. 14.13. Регистр опре- деляет характеристики принятого сообщения и доступен только для чтения при нормальных операциях интерфейса CAN, однако если установлен бит RM в ре- гистре CANMOD, в него может быть произведена запись в целях тестирования. Конкретный адрес регистра CANRFS (в зависимости от его принадлежности к одному из четырех возможных для микроконтроллера LPC2000 контроллеров CAN) см. в Табл. 14.4.
270 Глава 14. Контроллеры CAN и приемные фильтры Таблица 14.13. Биты регистра состояния принятого фрейма (CANRFS - ОхЕООх х020) Биты CANRFS Название Описание Значение после сброса Установка RM 9:0 ID Если бит ВР (см. ниже) сброшен, то это поле — отсчитываемый от нуля номер в поисковой таблице ОЗУ, в которой приемный фильтр хра- нит идентификатор, совпадающий с получен- ным идентификатором. Запрещенные входы CAN в стандартных таблицах включены в эту нумерацию, но не участвуют в сравнении 0 X 10 ВР Если этот бит установлен, то текущее сообще- ние было получено приемным фильтром, и по- ле идентификатора не имеет смысла 0 X 19:16 DLC Это поле содержит код длины данных (DLC) текущего принятого сообщения. Когда бит RTR = 0 (см. ниже), в регистрах CANRDA и CAN RD В доступно для чтения следующее ко- личество байтов: 0000...0111 = от 0 до 7 байтов, 1000... 1111 = 8 байтов. Когда RTR = 1, значение поля DLC определя- ет, какое количество байтов данных требуется передать обратно удаленному корреспонденту с тем же идентификатором, что и у текущего принятого сообщения 0 X 30 RTR Это бит удаленного запроса на передачу теку- щего принятого сообщения. 0: принят текущий фрейм данных, байты кото- рого (при ненулевом DLC) могут быть прочи- таны из регистра CANRDA и, возможно, из ре- гистра CANRDB. 1: фрейм данных, количество байтов в котором определяется значением DLC, требуется от- править удаленному корреспонденту, исполь- зуя тот же идентификатор, что и у текущего принятого сообщения 0 X 31 FF 0: текущее принятое сообщение включает 11-битный идентификатор. 1: текущее принятое сообщение включает 29-битный идентификатор. Значение этого бита влияет на состояние регистра CANRID, который будет описан далее 0 X Регистр принятого идентификатора (CANRID — ОхЕООх х024) Битовая структура регистра CANRID приведена в Табл. 14.14, Табл. 14.15. В зависимости от состояния бита FF в регистре CANRFS, регистр CANRID имеет два различных формата и содержит поле идентификатора (Identifier) текущего принятого сообщения. Этот регистр доступен только для чтения при нормаль- ных операциях интерфейса CAN, однако если установлен бит RM в регистре CANMOD, в него может быть произведена запись в целях тестирования. Конк- ретный адрес регистра CANRID (в зависимости от его принадлежности к одно- му из четырех возможных для микроконтроллера LPC2000 контроллеров CAN) см. в Табл. 14.4.
14.4. Регистры контроллера CAN 271 Таблица 14.14, Биты регистра принятого идентификатора при FF = О (CANRID - ОхЕООх х024) Биты CANRID Название Описание Значение после сброса Установка RM 10:0 ID Поле идентификатора (Identifier) текущего принято- го сообщения, состоящее из 11 битов. В интерфейсе CAN 2.0А, эти биты называются ID10-ID0, а в ин- терфейсе CAN 2.0B они называются ID29-ID18 0 X Таблица 14,15, Биты регистра принятого идентификатора при FF = 1 (CANRID - ОхЕООх х024) Биты CANRID Название Описание Значение после сброса Установка RM 28:0 ID Поле идентификатора (Identifier) текущего приня- того сообщения, состоящее из 29 битов. В интер- фейсе CAN 2.0B они называются ID29-ID0 0 X Регистр принятых данных A (CANRDA — ОхЕООх х028) Битовая структура регистра CANRDA приведена в Табл. 14.16. Регистр со- держит первые четыре байта данных текущего принятого сообщения. Этот ре- гистр доступен только для чтения при нормальных операциях интерфейса CAN, однако если установлен бит RM в регистре CANMOD, в него может быть произведена запись в целях тестирования. Конкретный адрес регистра CANRDA (в зависимости от его принадлежности к одному из четырех возмож- ных для микроконтроллера LPC2000 контроллеров CAN) см. в Табл. 14.4. Таблица 14,16, Биты регистра принятых данных A (CANRDA — ОхЕООх х028) Биты CANRDA Название Описание Значение после сброса Установка RM 7:0 Data 1 Если значение поля DLC в регистре CANRFS больше или равно 0001 (в бинарном виде), то эти биты составляют первый байт данных теку- щего принятого сообщения 0 X 15:8 Data 2 Если значение поля DLC в регистре CANRFS больше или равно 0010 (в бинарном виде), то эти биты составляют второй байт данных теку- щего принятого сообщения 0 X 23:16 Data 3 Если значение поля DLC в регистре CANRFS больше или равно 0011 (в бинарном виде), то эти биты составляют третий байт данных теку- щего принятого сообщения 0 X 31:24 Data 4 Если значение поля DLC в регистре CANRFS больше или равно 0100 (в бинарном виде), то эти биты составляют четвертый байт данных текущего принятого сообщения 0 X Регистр принятых данных В (CANRDB — ОхЕООх хО2С) Битовая структура регистра CANRDB приведена в Табл. 14.17. Регистр со- держит байты данных с пятого по восьмой текущего принятого сообщения. Этот регистр доступен только для чтения при нормальных операциях интер- фейса CAN, однако если установлен бит RM в регистре CANMOD, в него мо- жет быть произведена запись в целях тестирования. Конкретный адрес регистра
272 Глава 14. Контроллеры CAN и приемные фильтры CANRDB (в зависимости от его принадлежности к одному из четырех возмож- ных для микроконтроллера LPC2000 контроллеров CAN) см. в Табл. 14.4. Таблица 14.17. Биты регистра принятых данных В (CANRDB — ОхЕООх хО2С) Биты CANRDB Название Описание Значение после сброса Установка RM 7:0 Data 5 Если значение поля DLC в регистре CANRFS больше или равно 0101 (в бинарном виде), то эти биты составля- ют пятый байт данных текущего принятого сообщения 0 X 15:8 Data 6 Если значение поля DLC в регистре CANRFS больше или равно 0110 (в бинарном виде), то эти биты составля- ют шестой байт данных текущего принятого сообщения 0 X 23:16 Data 7 Если значение поля DLC в регистре CANRFS больше или равно 0111 (в бинарном виде), то эти биты составля- ют седьмой байт данных текущего принятого сообщения 0 X 31:24 Data 8 Если значение поля DLC в регистре CANRFS больше или равно 1000 (в бинарном виде), то эти биты составля- ют восьмой байт данных текущего принятого сообще- ния 0 X Информационный регистр передаваемого фрейма (CANTF11,2,3- ОхЕООх хОЗО, 40, 50) Битовая структура регистра CANTFI приведена в Табл. 14.18. Когда соответс- твующий бит TBS в регистре CANSR установлен, программное обеспечение пользователя может производить запись в один из этих регистров для того, чтобы определить формат следующего передаваемого сообщения для соответствующе- го буфера Тх. Чтение не указанных в таблице битов этого регистра возвращает значение 0, и в эти биты должны быть записаны нули. Конкретный адрес регис- тра CANTFI (в зависимости от его принадлежности к одному из четырех возмож- ных для микроконтроллера LPC2000 контроллеров CAN) см. в Табл. 14.4. Таблица 14.18. Биты регистра передаваемого фрейма (CANTFI1,2,3 — ОхЕООх хОЗО, 40, 50) Биты CANTFI Название Описание Значение после сброса Установка RM 7:0 PRIO Если бит ТРМ в регистре CANMOD установлен, бу- ферам Тх разрешается конкурировать за право пер- воочередной отправки содержащихся в них сообще- ний. Исход конкуренции определяется содержимым данного поля. Наименьшее двоичное значение имеет наивысший приоритет 19:16 DLC Задает значение поля DLC следующего передаваемо- го сообщения. Кроме того, если RTR = 0 (см. ниже), то это значение определяет количество байтов дан- ных, пересылаемых в следующем передаваемом со- общении из регистров CANTDA и CANTDB: 0000...0111 = 0...7 байтов, 1ххх = 8 байтов 0 X 30 RTR Задает значение бита RTR в следующем передавае- мом сообщении. Если этот бит сброшен, то количес- тво пересылаемых байтов данных из регистров CANTDA и CANTDB определяется значением поля DLC. Если этот бит установлен, то удаленный кор- респондент посылает фрейм, содержащий запрос о количестве этих байтов 0 X 31 FF Если этот бит сброшен, то следующее передаваемое сообщение будет отправлено с 11-битным идентифи- катором, а если этот бит установлен, то сообщение будет отправлено с 29-битным идентификатором 0 X
14.4. Регистры контроллера CAN 273 Регистр идентификатора передачи (CANTID1,2,3 — ОхЕООх х034, 44, 54) Битовая структура регистра CANTID приведена в Табл. 14.19, Табл. 14.20. Регистр имеет два различных формата в зависимости от значения бита FF в со- ответствующем регистре CANTFI. Когда один из битов TBS1...3 в регистре CANSR установлен, программное обеспечение пользователя может произво- дить запись в соответствующий регистр CANTID для того, чтобы определить по- ле идентификатора (Identifier), а затем передать сообщение. Чтение не указан- ных в таблице битов этого регистра возвращает значение 0, и в эти биты должны быть записаны нули. Конкретный адрес регистра CANTID (в зависимости от его принадлежности к одному из четырех возможных для микроконтроллера LPC2000 контроллеров CAN) см. в Табл. 14.4. Таблица 14.19. Биты регистра CAN идентификатора передачи при FF = 0 (CANTID1,2,3 - ОхЕООх х034,44, 54) Биты CANTID Название Описание Значение после сброса Установка RM 10:0 ID 11-битный идентификатор, который будет включен в следующее передаваемое сообщение 0 X Таблица 14.20. Биты регистра CAN идентификатора передачи при FF = 1 (CANTID1, 2, 3 - ОхЕООх х034,44, 54) Биты CANTID Название Описание Значение после сброса Установка RM 28:0 ID 29-битный идентификатор, который будет включен в следующее передаваемое сообщение 0 X Регистр данных передачи A (CANTDA1,2,3 — ОхЕООх х038,48, 58) Битовая структура регистра CANTDA приведена в Табл. 14.21. Когда один из битов TBS1...3 в регистре CANSR установлен, программное обеспечение пользователя может производить запись в соответствующий регистр CANTDA для того, чтобы определить первые четыре байта данных в следующем переда- ваемом сообщении. Конкретный адрес регистра CANTDA (в зависимости от его принадлежности к одному из четырех возможных для микроконтроллера LPC2000 контроллеров CAN) см. в Табл. 14.4. Таблица 14.21. Биты регистра данных передачи A (CANTDA1,2,3 — ОхЕООх х038,48, 58) Биты CANTDA Название Описание Значение после сброса Установка RM 7:0 Data 1 Если RTR = 0 и значение поля DLC в передаваемом регистре CANTFI больше или равно 0001, то этот байт передается как первый байт данных следую- щего передаваемого сообщения 0 X 15:8 Data 2 Если RTR = 0 и значение поля DLC в передаваемом регистре CANTFI больше или равно 0010, то этот байт передается как второй байт данных следующе- го передаваемого сообщения 0 X 23:16 Data 3 Если RTR = 0 и значение поля DLC в передаваемом регистре CANTFI больше или равно 0011, то этот байт передается как третий байт данных следующе- го передаваемого сообщения 0 X 31:24 Data 4 Если RTR = 0 и значение поля DLC в передаваемом регистре CANTFI больше или равно 0100, то этот байт передается как четвертый байт данных следую- щего передаваемого сообщения 0 X 304
274 Глава 14. Контроллеры CAN и приемные фильтры Регистр данных передачи В (CANTDB1,2,3 — ОхЕООх хОЗС, 4С, 5С) Битовая структура регистра CANTDB приведена в Табл. 14.22. Когда один из битов TBS1...3 в регистре CANSR установлен, программное обеспечение пользователя может производить запись в соответствующий регистр CANTDB для того, чтобы определить байты данных с пятого по восьмой в следующем пе- редаваемом сообщении. Конкретный адрес регистра CANTDB (в зависимости от его принадлежности к одному из четырех возможных для микроконтроллера LPC2000 контроллеров CAN) см. в Табл. 14.4. Таблица 14.22. Биты регистра данных передачи В (CANTDB 1,2, 3 — ОхЕООх хОЗС, 4С, 5С) Биты CANTDB Название Описание Значение после сброса Установка RM 7:0 Data 5 Если RTR = 0 и значение поля DLC в передаваемом регистре CANTFI больше или равно 0101, то этот байт передается как пятый байт данных следующе- го передаваемого сообщения 0 X 15:8 Data 6 Если RTR = 0 и значение поля DLC в передаваемом регистре CANTFI больше или равно 0110, то этот байт передается как шестой байт данных следующе- го передаваемого сообщения 0 X 23:16 Data 7 Если RTR = 0 и значение поля DLC в передаваемом регистре CANTFI больше или равно 0111, то этот байт передается как седьмой байт данных следую- щего передаваемого сообщения 0 X 31:24 Data 8 Если RTR = 0 и значение поля DLC в передаваемом регистре CANTFI больше или равно 1000, то этот байт передается как восьмой байт данных следую- щего передаваемого сообщения 0 X 14.5. Операции контроллера CAN 14.5.1. Обработка ошибок Контроллеры CAN микроконтроллеров LPC2000, в соответствии со специ- фикацией протокола CAN 2.0В, подсчитывают и обрабатывают ошибки при пе- редаче и приеме. Если во время операции приема или передачи была зафикси- рована ошибка, соответствующий счетчик ошибок инкрементируется (его зна- чение увеличивается на 1); если ошибок не было зафиксировано, счетчик декрементируется (его значение уменьшается на 1). Когда значение счетчика ошибок передачи достигает 255, то, при обнаруже- нии следующей ошибки, CAN-контроллер переходит в состояние «отключение шины» («Bus-Off»). В этом состоянии устанавливаются следующие биты: BS в регистре CANSR, BEI и EI в CANIR, если это разрешено, и RM в CANMOD. Установка бита RM сбрасывает и отключает большинство функций CAN-koht- роллера. В этот момент, в счетчик ошибок передачи автоматически записывает- ся значение 127, а счетчик ошибок приема сбрасывается в 0. Затем пользова- тельская программа должна сбросить бит RM. После того, как этот сброс будет осуществлен, счетчик ошибок передачи переключается в режим счета на убыва- ние (от 127 до 0). Каждый раз, когда на шине генерируется условие «шина сво- бодна» («Bus-Free»), представляющее собой последовательность из 11 рецес-
14.5. Операции контроллера CAN 275 сивных]) битов, значение счетчика ошибок передачи уменьшается на 1. Пользо- вательская программа может контролировать этот процесс, производя чтение содержимого счетчика. Когда счет на убывание будет закончен (т. е. будет обна- ружено, что на шине сгенерировано 128-е по счету условие «Bus-Free»), CAN- контроллер сбросит биты BS и ES в регистре CANSR, и установит бит EI в ре- гистре CANICR, если установлен бит EIE в регистре CANIER. В счетчики ошибок передачи и приема может быть произведена запись, ес- ли установлен бит RM в регистре CANMOD. Запись числа 255 в счетчик оши- бок передачи вынудит CAN-контроллер перейти в состояние «отключение ши- ны». В случае, когда CAN-контроллер уже находится в состоянии «отключение шины» (бит BS в регистре CANSR установлен), запись любого значения от 0 до 254 в счетчик ошибок передачи приведет к выходу из этого состояния. Если те- перь пользовательская программа сбросит бит RM в регистре CANMOD, то после появления на шине первого же условия «Bus-Free» (11 последовательных рецессивных битов) контроллер CAN перейдет в режим готовности к нормаль- ным операциям обмена по шине. 14.5.2. «Спящий» режим CAN-контроллер переходит в «спящий» режим, если установлен бит SM в регистре режима CAN, отсутствуют обрабатываемые прерывания CAN и не от- мечено никакой активности на шине CAN. Пользовательская программа может установить бит SM лишь в том случае, когда сброшен бит RM в регистре режи- ма CANMOD. Пользовательская программа может также установить бит WUIE в регистре разрешения прерываний CANIER с тем, чтобы разрешить «пробуж- дение» от любого прерывания. CAN-контроллер «пробуждается» (и, если установлен бит WUIE в регистре разрешения прерываний CANIER, устанавливает бит WUI в регистре захвата и прерываний CANICR) в ответ на одно из следующих действий: • на шине CAN обнаружен доминантный бит; • программный сброс бита SM в регистре режима CANMOD. CAN-контроллер, «пробудившийся» из-за возникновения активности на шине, не переходит в режим готовности к приему сообщений до тех пор, пока он не опре- делит наличие на шине условия «Bus-Free» (11 последовательных рецессивных би- тов). Если во время программной установки бита SM производится обработка пре- рывания или шина CAN активна, то пробуждение происходит немедленно. 14.5.3. Прерывания Каждый CAN-контроллер может генерировать три запроса на прерывание: по приему, цо передаче и от «другого состояния». Прерывания по передаче от трех буферов Тх объединяются по схеме ИЛИ (OR). Каждому запросу на преры- 0 В описании протокола CAN используются понятия «доминантный бит» и «рецессив- ный бит». По умолчанию, доминантный бит имеет значение НИЗКОГО уровня и «затирает» любое количество рецессивных битов (по умолчанию, имеющих значение ВЫСОКОГО уровня). То есть, если одно из участвующих в процессе обмена устройств выставило на шину CAN доминантный бит (0), а одно или несколько других — рецессивный (1), то текущее со- стояние шины будет определяться доминантным битом. (Прим. науч, ред.)
276 Глава 14. Контроллеры CAN и приемные фильтры вание по приему и по передаче от каждого из контроллеров CAN назначен свой собственный канал в контроллере векторов прерывания (VIC), и каждый запрос должен обрабатываться своей собственной подпрограммой обработки прерыва- ния. Прерывания от «другого состояния» могут генерировать все CAN-контрол - леры, а также приемный фильтр по условию LUTerr (см. ниже). Эти прерывания также объединяются по схеме ИЛИ и направляются в какой-либо канал VIC. 14.5.4. Приоритет передачи В режиме передачи, буферы Тх конкурируют между собой за право перво- очередной отправки содержащихся в них сообщений. Если бит ТРМ в регистре CANMOD сброшен, то результат конкуренции зависит от значений CAN-иден- тификаторов (TID) этих буферов. Если бит ТРМ установлен, то результат кон- куренции при передаче зависит от значений полей PRIO в битах 7:0 регистров CANTFI. В обоих этих случаях, наименьшее двоичное значение поля или иден- тификатора имеет наибольший приоритет. Если два (или три) буфера, которым разрешена передача, имеют одинаковое наименьшее значение поля или иден- тификатора, то первым передает буфер с меньшим номером. CAN-контроллер производит выбор среди конкурирующих буферов Тх в динамическом режиме, непосредственно перед тем, как требуется передать оче- редное сообщение. 14.6. Центральные регистры CAN Группа центральных регистров CAN включает в себя три регистра, доступ- ных только для чтения. Эти регистры содержат биты общего доступа, значения которых отображают состояние CAN-контроллеров. Для микроконтроллеров LPC2000 с тем или иным количеством встроенных CAN-контроллеров, коли- чество активных битов общего доступа в центральных регистрах будет соответс- твующим. Для отображения того или иного состояния каждого из встроенных CAN-контроллеров (CAN1...CAN4), в каждом из байтов центрального регистра выделен один специфический бит. Центральный регистр состояния передачи (CANTxSR — 0хЕ004 0000) Битовая структура регистра CANTxSR приведена в Табл. 14.23. Таблица 14.23. Биты центрального регистра состояния передачи (CANTxSR - 0хЕ004 0000) Биты CANTxSR Название Описание Значение после сброса 3:0 TS4:1 1: CAN-контроллер передает сообщение (то же самое, что бит TS в регистре CANGSR). Биты TS4:3 доступны только в LPC2294. В других микроконт- роллерах эти биты зарезервированы 0 7:4 Зарезер- вирова- ны Пользовательское программное обеспечение не должно про- изводить запись в зарезервированные биты. Чтение зарезерви- рованного бита возвращает неопределенное значение NA
14.6. Центральные регистры CAN 277 Таблица 14.23. Биты центрального регистра состояния передачи (CANTxSR — 0хЕ004 0000) (продолжение) Биты CANTxSR Название Описание Значение после сброса 11:8 TBS4.1 1: Все три буфера Тх доступны центральному процессору (то же самое, что бит TBS в CANGSR). Биты TBS4:3 доступны только в LPC2294. В других микрокон- троллерах эти биты зарезервированы Все 1 15:12 Зарезер- вирова- ны Пользовательское программное обеспечение не должно про- изводить запись в зарезервированные биты. Чтение зарезерви- рованного бита возвращает неопределенное значение NA 19:16 TCS4:1 1: Все требуемые передачи были закончены успешно (то же са- мое, что бит TCS в регистре CANGSR). Биты TCS4:3 доступны только в LPC2294. В других микрокон- троллерах эти биты зарезервированы Все 1 31:20 Зарезер- вирова- ны Пользовательское программное обеспечение не должно про- изводить запись в зарезервированные биты. Чтение зарезерви- рованного бита возвращает неопределенное значение NA Центральный регистр состояния приема (CANRxSR — 0хЕ004 0004) Битовая структура регистра CANRxSR приведена в Табл. 14.24. Таблица 14.24. Биты центрального регистра состояния приема (CANRxSR — 0хЕ004 0004) Биты CANRxSR Название Описание Значение после сброса 3:0 RS4:1 1: CAN-контроллер принимает сообщение (то же самое, что бит RS в регистре CANGSR). Биты RS4:3 доступны только в LPC2294. В других микроконт- роллерах эти биты зарезервированы 0 7:4 Зарезер- вирова- ны Пользовательское программное обеспечение не должно про- изводить запись в зарезервированные биты. Чтение зарезерви- рованного бита возвращает неопределенное значение NA 11:8 RBS4:1 1: Принятое сообщение доступно в CAN-контроллере (то же самое, что бит RBS в регистре CANGSR). Биты RBS4:3 доступны только в LPC2294. В других микрокон- троллерах эти биты зарезервированы 0 15:12 Зарезер- вирова- ны Пользовательское программное обеспечение не должно про- изводить запись в зарезервированные биты. Чтение зарезерви- рованного бита возвращает неопределенное значение NA 19:16 DOS4:1 1: Сообщение было потеряно, потому что предыдущее сооб- щение для этого CAN-контроллера не было прочитано доста- точно быстро (то же самое, что бит DOS в регистре CANGSR). Биты DOS4:3 доступны только в LPC2294. В других микрокон- троллерах эти биты зарезервированы 0 31:20 Зарезер- вирова- ны Пользовательское программное обеспечение не должно про- изводить запись в зарезервированные биты. Чтение зарезерви- рованного бита возвращает неопределенное значение NA
278 Глава 14. Контроллеры CAN и приемные фильтры Центральный смешанный регистр состояния (CANMSR — 0хЕ004 0008) Битовая структура регистра CANMSR приведена в Табл. 14.25. Таблица 14.25. Биты центрального смешанного регистра состояния (CANMSR — 0хЕ004 0008) Биты CANMSR Название Описание Значение после сброса 3:0 ES4:1 1: Один или оба счетчика ошибок приема и передачи достигли предельного значения, заданного в регистре CANEWL (то же самое, что бит ES в регистре CANGSR). Биты ES4:3 доступны только в LPC2294. В других микроконт- роллерах эти биты зарезервированы 0 7:4 Зарезер- вирова- ны Пользовательское программное обеспечение не должно про- изводить запись в зарезервированные биты. Чтение зарезерви- рованного бита возвращает неопределенное значение NA 11:8 BS4:1 1: CAN-контроллер в настоящее время проявляет активность на шине (то же самое, что бит BS в регистре CANGSR). Биты BS4:3 доступны только в LPC2294. В других микроконт- роллерах эти биты зарезервированы 0 31:12 Зарезер- вирова- ны Пользовательское программное обеспечение не должно производить запись в зарезервированные биты. Чтение за- резервированного бита возвращает неопределенное значе- ние NA 14.7. Глобальный приемный фильтр Этот встроенный в CAN-контроллер аппаратный модуль обеспечивает по- иск совпадений (откликов) идентификаторов, принятых в ходе обмена по шине CAN от удаленных корреспондентов, с имеющимися в микроконтроллере идентификаторами (в терминологии интерфейса CAN такой поиск называется приемной фильтрацией) для всех CAN-контроллеров. Модуль приемного фильтра включает в себя блок оперативной памяти, организованной как 512x32 бит (2 Кбайт), в которой пользовательская программа размещает от од- ной до пяти таблиц идентификаторов. Эта оперативная память CAN может со- держать до 1024 стандартных идентификаторов или до 512 расширенных иден- тификаторов, либо смешанный набор идентификаторов обоих типов. Если в приложении используются стандартные 11-битные идентификаторы, то, как минимум, одна из трех расположенных в выделенной для них области оперативной памяти приемного фильтра таблиц должна быть не пустой. Если разрешен дополнительный режим «fullCAN», то первая таблица содержит стан- дартные идентификаторы, для которых прием должен обрабатываться в указан- ном режиме. Вторая таблица содержит индивидуальные стандартные идентифи- каторы, а третья таблица содержит диапазоны стандартных идентификаторов, для которых производится прием сообщений через CAN-контроллеры. Таблицы идентификаторов «fullCAN» и индивидуальных стандартных идентификаторов должны размещаться в памяти последовательно, в порядке возрастания число- вых значений идентификаторов. В одном 16-битном полуслове хранится одно значение идентификатора. Каждая шина CAN имеет свою собственную таблицу адресов, а каждый CAN-контроллер также имеет свой номер (001... 110), к кото- рому производится обращение. Совокупность номера CAN-контроллера и стан-
14.7. Глобальный приемный фильтр 279 дартного идентификатора, хранящаяся в одном полуслове, называется входом CAN. На Рис. 14.1а представлен формат входа CAN таблицы индивидуальных стандартных идентификаторов в режиме «fullCAN». 31 29 15 13 16 О Контроллер # Бит зап- рета Не исп. Идентификатор а) Формат входа таблицы индивидуальных стандартных идентификаторов в режиме «fullCAN» 31 29 26 Контроллер # Бит зап- рета Не исп. Меньший используемый идентификатор Контроллер # Бит зап- рета Не исп. Больший используемый идентификатор б) Формат таблицы диапазона индивидуальных стандартных идентификаторов 31 29 28 О Контроллер # Идентификатор в) Формат входа таблицы расширенных идентификаторов Рис. 14.1. Форматы таблиц идентификаторов CAN Таблица диапазонов стандартных идентификаторов содержит в каждом 32- битном слове верхнюю и нижнюю границы диапазона (включительно). Эти таблицы также должны размещаться в памяти в порядке возрастания числовых значений идентификаторов. На Рис. 14.16 представлен формат таблицы диапа- зона индивидуальных стандартных идентификаторов. Входы CAN таблиц, помимо идентификаторов и номера контроллера, со- держат биты запрета, что дает возможность пользователю динамически разре- шить или запретить участие в сравнении (отклике) определенных идентифика- торов или диапазонов идентификаторов. Когда функция приемного фильтра разрешена, то в оперативной памяти приемного фильтра программно могут быть изменены только эти биты запрета. Участие в сравнении (отклике) всего заданного диапазона стандартных идентификаторов (входов CAN) разрешается путем записи 32 нулевых битов в соответствующее слово в оперативной памяти, а запрещается путем записи туда 32 единичных битов (OxFFFF FFFF). Следует заметить, что при этих операциях происходит фактическое изменение только битов запрета. Запрещение входов CAN должно производиться в порядке воз- растания числовых значений их идентификаторов. Если в приложении используются расширенные 29-битные идентификато- ры, то, как минимум, одна из двух выделенных для них в оперативной памяти приемного фильтра таблиц должна быть не пустой. Первая из этих таблиц со- держит индивидуальные расширенные идентификатдры, а вторая — диапазоны расширенных идентификаторов. Индивидуальные расширенные идентифика- торы должны размещаться в таблице в порядке возрастания их числовых значе- ний. Таблица диапазонов расширенных идентификаторов должна содержать четное число входов CAN. Каждая пара входов в таблице (первый и второй, тре-
280 Глава 14. Контроллеры CAN и приемные фильтры тий и четвертый, и т. д.) образуют некоторый диапазон расширенных иденти- фикаторов, при попадании в который принятого от удаленного корреспондента расширенного идентификатора производится прием сообщения, в котором он содержится. Подобно идентификаторам в таблице индивидуальных расширенных иден- тификаторов, диапазоны в таблице диапазонов расширенных идентификаторов должны размещаться в порядке возрастания их числовых значений. На Рис. 14.1в представлен формат входа CAN таблицы индивидуальных расширен- ных идентификаторов. Режим «fullCAN» при использовании расширенных 29- битных идентификаторов не поддерживается. Для указания границ между таблицами в оперативной памяти приемного фильтра, используются пять адресных регистров: стандартные адреса fullCAN, стандартные индивидуальные адреса, диапазоны стандартных адресов, расши- ренные индивидуальные адреса и диапазоны расширенных адресов. Кроме то- го, в приемном фильтре имеется регистр конца таблиц. Таблицы, границы которых задаются содержимым первых пяти регист- ров, должны размещаться в памяти последовательно. Начало каждой последу- ющей таблицы неявно подразумевает конец предыдущей таблицы. Конец таб- лицы диапазона расширенных идентификаторов задается содержимым регис- тра конца таблиц. Если адрес начала таблицы равен адресу начала следующей за ней таблицы или содержимому регистра конца таблиц, то данная таблица пуста. Когда идентификатор от подключенного к шине CAN внешнего устройс- тва поступает в приемный блок CAN-контроллера, он сообщает об этом при- емному фильтру. В ответ на это, приемный фильтр читает номер контроллера, размер идентификатора и сам идентификатор непосредственно из CAN-koht- роллера. Затем он начинает поиск в своей оперативной памяти, чтобы определить, нужно ли принять сообщение или следует его игнорировать. Если разрешен ре- жим «fullCAN» и от CAN-контроллера поступает сигнал, что текущее сообще- ние содержит стандартный идентификатор, приемный фильтр производит по- иск сначала в таблице идентификаторов, которые соответствуют приему в ре- жиме «fullCAN». В противном случае или в случае, когда приемный фильтр не находит совпадения в таблице «fullCAN», производится поиск в таблице инди- видуальных идентификаторов для размера идентификатора, сообщенного CAN-контроллером. Если совпадение находится, то приемный фильтр дает CAN-контроллеру сигнал сохранить сообщение, и обеспечивает сохранение номера принятого идентификатора в поле ID регистра состояния принятого фрейма. Если приемный фильтр не находит совпадения в соответствующей таблице индивидуальных идентификаторов, то он ищет совпадение в таблице диапазо- нов идентификаторов Для размера идентификатора, сообщенного CAN-koht- роллером. Если совпадение находится, то приемный фильтр дает CAN-koht- роллеру сигнал чтобы сохранить сообщение, и обеспечивает сохранение номера принятого идентификатора в поле ID регистра состояния принятого фрейма. Если приемный фильтр не находит совпадения ни в таблице индивидуаль- ных идентификаторов, ни в таблице диапазонов идентификаторов, соответс- твующих размеру принятого идентификатора, то он сообщает CAN-контролле- ру, что следует отказаться от принятого сообщения (игнорировать его).
14.7. Глобальный приемный фильтр 281 14.7.1. Регистры приемного фильтра Регистр режима приемного фильтра (AFMR — ОхЕООЗ С000) Битовая структура регистра AFMR приведена в Табл. 14.26. Таблица 14.26. Биты регистра режима приемного фильтра (AFMR — ОхЕООЗ С000) Биты AFMR Название Описание Значение после сброса 0 AccOff 1: Если бит АссВР (см. ниже) установлен, приемный фильтр включен. Если бит АссВР сброшен (см. ниже), приемный фильтр не функционирует, и все сообщения по шине CAN игнорируются 0: Если этот бит и бит АссВР (см. ниже) сброшены, прием- ный фильтр экранирует (игнорирует) принятые CAN- идентификаторы 1 1 АссВР 1: Все входящие сообщения принимаются через разрешен- ные CAN-контроллеры. Пользовательская программа должна установить этот бит до изменения содержимого любого из регистров, описанных ниже, и до изменения со- держимого оперативной памяти поисковой таблицы путем установки или сброса битов запрета в стандартных входах идентификатора. 0: Если этот бит и бит AccOff сброшены, приемный фильтр экранирует (игнорирует) принятые CAN-идентификаторы 0 2 eFCAN 1: Сам приемный фильтр будет заботиться о получении и сохранении сообщений для выбранного значения стандар- тного идентификатора на выбранной шине CAN, что соот- ветствует дополнительному режиму «FullCAN». Описание режима «FullCAN» см. ниже. 0: Пользовательская программа должна читать все прини- маемые CAN-контроллерами сообщения для всех разре- шенных идентификаторов на всех разрешенных шинах CAN 0 Регистр начального адреса стандартного индивидуального фрейма (SFF_sa - ОхЕООЗ С004) Битовая структура регистра SFF_sa приведена в Табл. 14.27. Таблица 14.27. Биты регистра начального адреса стандартного индивидуального фрейма (SFF_sa - ОхЕООЗ С004) Биты SFF_sa Название Описание Значение после сброса 10:2 Адрес начала таблицы индивидуальных стандартных иден- тификаторов в оперативной памяти приемного фильтра. Если таблица является пустой, то следует записать в этот регистр то же самое значение, что и в регистр SFF_GRP_sa. Для совместимости с будущими устройствами, рекоменду- ется записать нули в зарезервированные биты 31:11 и 1:0 этого регистра. Если бит eFCAN в регистре AFMR установлен, то значе- ние этих битов определяет также размер таблицы стандарт- ных идентификаторов в оперативной памяти приемного фильтра, в которой приемный фильтр будет производить поиск и (если найдет совпадение) автоматически сохранит принятое сообщение 0
282 Глава 14. Контроллеры CAN и приемные фильтры Регистр начального адреса группы стандартных фреймов (SFF_GRP_sa - ОхЕООЗ С008) Битовая структура регистра SFF_GRP_sa приведена в Табл. 14.28. Таблица 14.28. Биты регистра начального адреса группы фреймов (SFF_GRP_sa — ОхЕООЗ С008) Биты SFF_.GRP_.sa Название Описание Значение после сброса 11:2 Адрес начала таблицы сгруппированных стандартных иден- тификаторов в оперативной памяти приемного фильтра. Если таблица является пустой, то следует записать в этот регистр то же самое значение, что и в регистр EFF_sa. Наибольшее значение, которое может быть записано в этот регистр — 0x800. В этом случае, используется только таблица индивидуальных стандартных идентификаторов и ее послед- нее слово (0x7FC) совпадает с последним словом оператив- ной памяти поисковой таблицы приемного фильтра. Для совместимости с будущими устройствами, рекоменду- ется записать нули в биты 31:12 и 1:0 этого регистра 0 Регистр начального адреса расширенного индивидуального фрейма (EFF_sa - ОхЕООЗ СООС) Битовая структура регистра EFF_sa приведена в Табл. 14.29. Таблица 14.29. Биты регистра начального адреса расширенного индивидуального фрейма (EFF_sa - ОхЕООЗ СООС) Биты EFF_sa Название Описание Значение после сброса 10:2 Адрес начала таблицы индивидуальных расширенных идентифи- каторов в оперативной памяти приемного фильтра. Если таблица является пустой, то следует записать в этот регистр то же самое значение, что и в регистр EFF_GRP_sa. Наибольшее значение, которое может быть записано в этот ре- гистр — 0x800. В этом случа,е обе таблицы расширенных иденти- фикаторов являются пустыми и используется последнее слово (0x7FC) оперативной памяти поисковой таблицы приемного фильтра. Для совместимости с будущими устройствами, рекомендуется за- писать нули в биты 31:11 и 1:0 этого регистра 0 Регистр начального адреса группы расширенных фреймов (EFF_GRP_sa - ОхЕООЗ СОЮ) Битовая структура регистра EFF_GRP_sa приведена в Табл. 14.30. Таблица 14.30. Биты регистра начального адреса группы расширенных фреймов (EFF_GRP__sa - ОхЕООЗ СОЮ) Биты EFF_GRP_sa Название Описание Значение после сброса 11:2 Адрес начала таблицы сгруппированных расширенных идентификаторов в оперативной памяти приемного филь- тра. Если таблица является пустой, то следует записать в этот регистр то же самое значение, что и в регистр ENDofTable. Наибольшее значение, которое может быть записано в этот регистр — 0x800. В этом случае эта таблица является пустой и используется последнее слово (0x7FC) оперативной памя- ти поисковой таблицы приемного фильтра. Для совместимости с будущими устройствами, рекоменду- ется записать нули в биты 31:12 и 1:0 этого регистра 0
14.7. Глобальный приемный фильтр 283 Регистр конца таблиц приемного фильтра (ENDofTable — ОхЕООЗ С014) Битовая структура регистра ENDofTable приведена в Табл. 14.31. Таблица 14.31. Биты регистра конца таблиц приемного фильтра (ENDofTable - ОхЕООЗ С014) Биты ENDofTable Название Описание Значение после сброса 11:2 Адрес, совпадающий с последним активным адресом в пос- ледней активной таблице приемного фильтра. Для совместимости с будущими устройствами, рекомендуется записать нули в биты 31:12 и 1:0 этого регистра. Если бит eFCAN в регистре AFMR сброшен, то наибольшее значение, которое может быть записано в этот регистр — 0x800. В этом случае, используется последнее слово (0x7FC) в оперативной памяти поисковой таблицы приемного фильтра. Если бит eFCAN в регистре AFMR установлен, то значение этих битов задает начало области оперативной памяти прием- ного фильтра, в которую приемный фильтр автоматически помещает принятые сообщения для выбранных идентифика- торов на выбранной шине CAN. В этом случае, максимальное значение, которое может быть написано в этот регистр — 0x800 минус 6-кратное значение регистра SFF_sa. Это позво- ляет отводить для хранения сообщения 12 байтов между этим адресом и концом оперативной памяти приемного фильтра для каждого стандартного идентификатора 0 Регистр адресов ошибки LUT (LUTerrAd — ОхЕООЗ С018) Битовая структура регистра LUTerrAd приведена в Табл. 14.32. Таблица 14.32. Биты регистра адресов ошибки поисковой таблицы Lookup Table (LUT) (LUTerrAd - ОхЕООЗ C018) Биты LUTerrAd Название Описание Значение после сброса 10:2 — Когда бит ошибки LUT (описание см. ниже) установлен, то это поле, доступное только для чтения, содержит адрес (в опе- ративной памяти приемного фильтра) поисковой таблицы, по которому приемный фильтр обнаружил ошибку в содержании таблицы 0 Регистр ошибки LUT (LUTerr — ОхЕООЗ СО1С) Битовая структура регистра LUTerr приведена в Табл. 14.33. Таблица 14.33. Биты регистра ошибки LUT (LUTerr — ОхЕООЗ С01С) Биты ' LUTerr Название Описание Значение после сброса 0 Этот бит, доступный только для чтения, устанавливается, если приемный фильтр обнаруживает ошибку в содержании таблицы, расположенной в оперативной памяти приемного фильтра. Этот бит сбрасывается, когда пользовательская программа обеспече- ние читает регистр LUTerrAd. Состояние данного бита, как источник прерывания, объединяет- ся по схеме ИЛИ с прерываниями «другой CAN» от CAN-koht- роллеров и направляется в какой-либо канал VIC 0
284 Глава 14. Контроллеры CAN и приемные фильтры 14.7.2. Примеры таблиц приемного фильтра и значений идентификаторов Предположим, что регистры адресов приемного фильтра содержат значения, приведенные в шестнадцатеричном представлении в столбце «Значение» Табл. 14.34. В следующих двух столбцах таблицы в десятичном представлении указа- но, какие количества слов и входов CAN соответствуют такому содержимому регис- тров, а в последнем столбце приведены значения поля индекса идентификатора (ID) (см. Табл. 14.13). Значение поля индекса ID может возвращаться в младших битах ре- гистра CANRFS для тех сообщений CAN, идентификаторы которых совпадают с идентификаторами входов CAN, содержащимися в таблице приемного фильтра. Таблица 14,34, Пример таблицы приемного фильтра и значений ивдекса ID Таблица Регистр Значение #слова #входы Индексы ID Стандартная индивидуальная SFF.sa 0x040 8 16 0...15 Стандартная таблица диапазонов SFF_GRP_sa 0x060 4 4 16...19 Расширенная индивидуальная EFF.sa 0x070 36 36 20...55 Расширенная таблица диапазонов EFF_GRP_sa 0x100 4 • 2 56...57 ENDofTable 0x110 На Рис. 14.2 в графическом виде приведен подробный пример заполнения адрес- ных регистров и соответствующего ему размещения таблиц и значений индексов ID. В этом примере представлены: • стандартная индивидуальная таблица, которая размещена с начального адре- са оперативной памяти приемного фильтра и содержит 26 идентификаторов; • стандартная таблица диапазонов, содержащая 12 диапазонов идентификаторов; • расширенная индивидуальная таблица, содержащая 3 идентификатора; • расширенная таблица диапазонов, содержащая 2 диапазона идентификаторов. VPB база + Поисковая таблица в ОЗУ Рис, 14,2, Пример заполнения адресных регистров приемного фильтра CAN
14.8. Режим «fullCAN» 285 14.8. Режим «fullCAN» Когда разрешен режим «fullCAN», приемный фильтр сам заботится о при- еме и сохранении сообщений, которые соответствуют выбранным значениям стандартных идентификаторов на выбранной шине CAN, поддерживающей ре- жим контроллеров «fullCAN». Чтобы использовать этот режим, необходимо вы- полнение следующих двух условий (это касается содержимого оперативной па- мяти приемного фильтра и регистров-указателей): 1. Содержимое регистра начального адреса стандартного индивидуального фрейма (SFF_sa) должно быть больше или равным удвоенному количеству идентифика- торов, для которых производится автоматический прием и запись в память сооб- щений. Кроме того, содержимое регистра SFF_sa должно быть кратно четырем. 2. Содержимое регистра конца таблиц приемного фильтра (EndOfTable) долж- но быть меньше или равно значению 0x800 минус 6-кратное значение регис- тра SFF_sa, чтобы обеспечивать возможность хранения в памяти двенадцати байтов данных сообщения для каждого идентификатора, для которого про- изводится автоматический прием и хранение. Когда эти условия выполняются и программно устанавливается бит eFCAN в регистре AFMR, то происходит следующее. Область между началом оперативной памяти приемного фильтра и адресом, содержащимся в SFF_sa, используется для хранения особой таблицы индивиду- альных стандартных идентификаторов и идентификаторов CAN-контролле- ров/шин. Входы CAN в этой области располагаются в порядке возрастания в формате, представленном на Рис. 14.1а. Входы CAN в этой таблице могут быть помечены как «запрещенные», как и в других стандартных таблицах. Если в этой таблице содержится нечетное число «FullCAN-идентификаторов, то, как минимум, один вход CAN должен быть помечен как «запрещенный». Для первого идентификатора, в отношении которого действует автоматичес- кое сохранение сообщения, назначается значение индекса ID, равное (SFF_sa)/2, где (SFF_sa) — содержимое регистра SFF_sa. Таким образом, значения индексов ID, сохраняемых в регистре состояния принятого фрейма CANRFS, при установ- ленном бите eFCAN регистра AFMR увеличиваются на (SFF_sa)/2 по сравнению со значениями, которые бы они имели при сброшенном бите eFCAN. Когда принимается стандартный идентификатор, приемный фильтр осу- ществляет поиск и сравнение в указанной выше особой таблице до осуществле- ния поиска и сравнения в стандартных индивидуальных и групповых таблицах. Если, для принятого сообщения, в этой особой таблице имеет место совпаде- ние идентификаторов, то приемный фильтр читает принятое сообщение из CAN- контроллера и сохраняет его в области своей оперативной памяти, начинающей- ся с адреса [(EndOfTable) + IDindex х 12], где (EndOfTable) — содержимое регистра EndOfTable, a IDindex — индекс идентификатора принятого сообщения. Формат таких автоматически сохраняемых сообщений показан на Рис. 14.3. Адрес 31 I I I |24 23| | | I I 116 151 I I I 10| |8|7| | | I I I |0 00 F F R T R 0000 SEM 0000 DLC 00000 ID +4 Rx Data 4 Rx Data 3 Rx Data 2 Rx Data 1 +8 Rx Data 8 Rx Data 7 Rx Data 6 Rx Data 5 Рис. 14.3. Формат сообщения, автоматически сохраняемого при приеме в режиме «fullCAN»
286 Глава 14. Контроллеры CAN и приемные фильтры Поля сообщения FF, RTR и DLC находятся в регистре CANRFS, битовая структура которого приведена в Табл. 14.13. В поле SEM аппаратно записывает- ся значение 01b, когда начинается обновление (аппаратный прием) сообщения, и значение 11b, когда обновление заканчивается. Чтобы получить доступ к сооб- щению, пользовательская программа должна записать в поле SEM значение 00b. При программном обращении ко всем трем словам, составляющим сообщение, необходимо убедиться, что все три прочитанных программой слова относятся к одному и тому же сообщению. Представленная на Рис. 14.4 блок-схема алгорит- ма программного чтения автоматически сохраненного сообщения показывает, каким образом следует использовать поле SEM для обеспечения такой гарантии. Начало Идет прием сообщения Это сообщение не было прочитано с момента последней проверки Последний раз читать 1 -е, 2-е, 3-е слова того же самого сообщения Рис, 14,4, Блок-схема алгоритма процедуры программного чтения принятого и автоматически сохраняемого сообщения в режиме «fullCAN»
ГЛАВА 15 ТАЙМЕРЫ TIMERO И TIMER1 Таймеры TIMERO и TIMER1 микроконтроллеров семейства LPC2000 функционально идентичны, за исключением их базовых периферийных ад- ресов. Таймеры TIMERO и TIMER1 имеют следующие основные характеристики: • 32-битный таймер с программируемым 32-битным предварительным де- лителем (предделителем); • до четырех 32-битных каналов захвата на один таймер. Каждый из кана- лов захвата может захватить (скопировать) текущее значение таймера при изменении некоторого входного сигнала. В случае захвата, имеется до- полнительная возможность генерировать прерывание; • четыре 32-битных регистра сравнения (совпадения), которые позволяют: — осуществлять непрерывное сравнение, с дополнительной возможнос- тью генерировать прерывание при совпадении; — остановить таймер при совпадении, с дополнительной возможностью генерировать прерывание; — осуществлять сброс таймера при совпадении, с дополнительной воз- можностью генерировать прерывание; • имеется до четырех внешних выходов, соответствующих регистрам сов- падения, со следующими возможностями: — сброс в НИЗКИЙ уровень при совпадении; — установка в ВЫСОКИЙ уровень при совпадении; — переключение (смена уровня, или инвертирование) при совпадении; — при совпадении состояние выхода не изменяется. Таймеры TIMERO и TIMER1 могут использоваться для следующих прило- жений: • интервальный таймер для подсчета внутренних событий микроконтрол- лера; • широтно-импульсный демодулятор через входы захвата; • независимый полнофункциональный таймер. 15.1. Общее описание Таймер предназначен для того, чтобы подсчитывать циклы периферий- ной тактовой частоты (pclk) и произвольно генерировать прерывания или выполнять другие действия. Значения таймера, при достижении которых будут выполнены те или иные действия, задаются четырьмя регистрами
288 Глава 15. Таймеры TIMEROu TIMER1 совпадения. Кроме того, в микроконтроллере имеются четыре входа захва- та, чтобы захватить (зафиксировать) значение таймера при изменении не- которого входного сигнала, с дополнительной возможностью генерировать прерывание. 15.2. Архитектура таймера Блок-схема таймеров TIMER0 и TIMER1 изображена на Рис. 15.1. 1 > Регистр захвата 3 не может использоваться в TIMER0. Рис, 15,1, Блок-схема TIMER0 и TIMER1
15.3. Описание выводов 289 15.3. Описание выводов Краткое описание выводов микроконтроллера LPC2000, связанных с каж- дым таймером (на примере микроконтроллеров LPC2119/29/94 и LPC2292/94), приведено в Табл. 15.1. Таблица 15.1. Описание выводов, связанных с таймерами (на примере микроконтроллеров LPC2119/29/94 и LPC2292/94) Название Тйп вывода Описание вывода САР0.3...0 САР1.3...0 Входы Сигналы захвата: перепад внешнего сигнала на входе захвата может быть программно выбран для того, чтобы загрузить в один из регистров захвата текущее значение таймера и, в качестве добавочной возможности, сгенерировать прерывание. Функция захвата может быть задана для некоторого множества выводов. Если, например, в качестве входов захвата выбраны 2 вывода с тем, чтобы обеспечивать функцию захвата CAPO.2 параллельно, то входные сигналы на них будут объеди- няться в соответствии с логической функцией ИЛИ и результи- рующее значение этой операции будет рассматриваться как единый входной сигнал. Для САРО.О может быть выбрано до 3 выводов одновременно. Для САР0.1 может быть выбрано до 2 выводов одновременно. Для САР0.2 может быть выбрано до 3 выводов одновременно. Для САРО.З может быть выбрано до 1 вывода. Для САР 1.0 может быть выбрано до 1 вывода. Для САР1.1 может быть выбрано до 1 вывода. Для САР 1.2 может быть выбрано до 2 выводов одновременно. Для С АР 1.3 может быть выбрано до 2 выводов одновременно МАТ0.3...0 МАТ1.3...0 Выходы Внешние выходы совпадения 0/1: когда содержимое регистра совпадения 0/1 (MR3:0) равно содержимому счетчика таймера (ТС), то, в соответствии с тем, как это задано программно, дан- ный выход может быть сброшен в НИЗКИЙ или установлен в ВЫСОКИЙ уровень, переключен (проинвертирован), либо оставлен в неизмененном состоянии. Регистр внешнего совпа- дения (EMR) управляет функциональными возможностями этого выхода. Одна и та же функция выхода совпадения может быть выбрана для нескольких выводов одновременно. Можно, например, выбрать 2 вывода с тем, чтобы они обеспечивали функцию МАТ 1.3 параллельно. Для МАТО.О может быть выбрано до 2 выводов одновременно. Для MATO. 1 может быть выбрано до 2 выводов одновременно. Для МАТ0.2 может быть выбрано до 2 выводов одновременно. Для МАТ0.3 может быть выбрано до 1 вывода Для МАТ 1.0 может быть выбрано до 1 вывода. Для МАТ1.1 может быть выбрано до 1 вывода. Для МАТ 1.2 может быть выбрано до 2 выводов одновременно. Для МАТ 1.3 может быть выбрано до 2 выводов одновременно 15.4. Описание регистров таймеров Каждый таймер содержит регистры, перечисленные в Табл. 15.2. Более де- тальные описания этих регистров приведены ниже. 304
290 Глава 15. Таймеры TIMEROu TIMER1 Таблица 15.2. Карта регистров TIMER0 и TIMER1 Обобщен- ное назва- ние Описание Доступ Значение после сброса^ Адрес и название TIMER0 TIMER1 IR Регистр прерываний. Запись в этот ре- гистр позволяет очистить прерывания. Чтение этого регистра позволяет опре- делить, какой из восьми возможных ис- точников вызвал прерывание R/W 0 0хЕ0004000 T0IR 0хЕ0008000 T1IR TCR Регистр управления таймером-счетчи- ком. Таймер может быть заблокирован или сброшен с помощью TCR R/W 0 0хЕ0004004 T0TCR 0хЕ0008004 T1TCR ТС Счетчик таймера. 32-битный регистр ТС инкрементируется каждые PR+1 циклов pclk. ТС управляется через TCR R/W 0 0хЕ0004008 ТОТС 0хЕ0008008 Т1ТС PR Регистр предделителя. ТС инкременти- руется каждые PR+1 циклов pclk R/W 0 0хЕ000400С T0PR 0хЕ000800С T1PR PC Счетчик предделителя. 32-битный ре- гистр PC — это счетчик, который инк- рементируется до значения, сохранен- ного в PR. Когда значение PR достигнуто, инкрементируется ТС R/W 0 0хЕ0004010 ТОРС 0хЕ0008010 Т1РС MCR Регистр управления совпадением. MCR используется для управления генераци- ей прерывания и сбросом ТС, когда происходит совпадение R/W 0 0хЕ0004014 T0MCR 0хЕ0008014 T1MCR MRO Регистр совпадения 0. Для MR0 можно через MCR разрешить сброс ТС, оста- новку ТС и PC, и/или сгенерировать прерывание каждый раз, когда содержи- мое MR0 совпадает с содержимым ТС R/W 0 0хЕ0004018 T0MR0 0хЕ0008018 T1MR0 MR1 Регистр совпадения 1. См. описание MR0 R/W 0 0хЕ000401С T0MR1 0хЕ000801С T1MR1 MR2 Регистр совпадения 2. См. описание MR0 R/W 0 0хЕ0004020 T0MR2 0хЕ0008020 T1MR2 MR3 Регистр совпадения 3. См. описание MR0 R/W 0 0хЕ0004024 T0MR3 0хЕ0008024 T1MR3 CCR Регистр управления захватом. CCR за- дает порядок использования перепадов входных сигналов, которые имеют мес- то на входах захвата, для управления за- грузкой регистров захвата. CCR опре- деляет, генерировать или нет прерывание, когда происходит захват R/W 0 0хЕ0004028 T0CCR 0хЕ0008028 T1CCR CRO Регистр захвата 0. CR0 загружается зна- чением ТС, когда выполняется условие захвата на входе САРО.О (САР 1.0) RO 0 0хЕ000402С T0CR0 0хЕ000802С T1CR0 CR1 Регистр захвата 1. См. описание CR0 RO 0 0хЕ0004030 T0CR1 0хЕ0008030 T1CR1 CR2 Регистр захвата 2. См. описание*СР0 RO 0 0хЕ0004034 T0CR2 0хЕ0008034 T1CR2 CR3 Регистр захвата 3. См. описание CR0 RO 0 0хЕ0004038 T0CR3 0хЕ0008038 T1CR3 EMR Регистр внешнего совпадения. EMR управляет входами внешнего совпаде- ния МАТО.О...3 (МАТ1.0...3) R/W 0 0хЕ000403С T0EMR 0хЕ000803С T1EMR Значение после сброса относится к данным, сохраненным только в используемых битах. Значения зарезервированных битов не учитываются.
15.4. Описание регистров таймеров 291 Регистр прерываний (IR: TIMERO — TOIR: 0хЕ0004000; TIMER 1 - T1IR: 0хЕ0008000) Регистр прерываний состоит из четырех битов (флагов) прерываний совпа- дения и четырех битов (флагов) прерываний захвата. Если прерывание сгенери- ровано, то соответствующий бит в регистре IR установлен. В противном случае, бит будет сброшен. Запись логической 1 в бит регистра IR сбросит соответству- ющее ему прерывание. Запись логического 0 не будет иметь эффекта. Битовая структура регистра IR приведена в Табл. 15.3. Таблица 15.3. Биты регистра прерываний (IR: TIMERO — TOIR: 0хЕ0004000; TIMER1 - T1IR: 0хЕ0008000) Номер бита IR Функция бита Описание Значение после сброса 0 Прерывание MR0 Флаг прерывания для канала совпадения 0 0 1 Прерывание MR1 Флаг прерывания для канала совпадения 1 0 2 Прерывание MR2 Флаг прерывания для канала совпадения 2 0 3 Прерывание MR3 Флаг прерывания для канала совпадения 3 0 4 Прерывание CR0 Флаг прерывания для канала захвата 0 0 5 Прерывание CR1 Флаг прерывания для канала захвата 1 0 6 Прерывание CR2 Флаг прерывания для канала захвата 2 0 7 Прерывание CR3 Флаг прерывания для канала захвата 3 0 Регистр управления таймером (TCR: TIMERO — TOTCR: 0хЕ0004004; TIMER1 - T1TCR: 0хЕ0008004) Регистр управления таймером TCR используется для того, чтобы управлять операциями таймера-счетчика. Битовая структура регистра TCR приведена в Табл. 15.4. Таблица 15,4, Биты регистра управления таймером (TCR: TIMERO — TOTCR: 0хЕ0004004; TIMER1 - T1TCR: 0хЕ0008004) Номер бита TCR Функция бита Описание Значение после сброса 0 Разрешение счетчика Когда этот бит установлен, счетчику таймера и счетчику предделителя разрешен счет. Если бит сброшен, счетчики заблокированы 0 1 Сброс счетчика Когда этот бит установлен, счетчик таймера и счет- чик предделителя синхронно сбрасываются по сле- дующему после установки фронту синхросигнала pclk. Счетчики остаются сброшенными до тех пор, пока бит TCR[ 1 ] не сбрасывается в НИЗКИЙ уро- вень 0 Счетчик таймера (ТС: TIMERO - ТОГО; 0хЕ0004008; TIMER1 - Т1ТС: 0хЕ0008008) 32-битный счетчик таймера инкрементируется, когда счетчик предделителя достигает своего конечного значения. Если ТС не был сброшен при достиже- нии его заданного верхнего предела, то он досчитает до значения OxFFFFFFFF, а затем сбросится в значение 0x00000000. Этот случай не вызовет прерывания. Однако если это необходимо, для обнаружения переполнения ТС может ис- пользоваться регистр совпадения.
292 Глава 15. Таймеры TIMERO и TIMER1 Регистр предделителя (PR: TIMERO — TOPR: 0хЕ000400С; TIMER1 - T1PR: 0хЕ000800С) 32-битный регистр предделителя определяет максимальное (конечное) зна- чение для счетчика предделителя. Регистр счетчика предделителя (PC: TIMERO — ТОРС: 0хЕ0004010; TIMER1 - Т1РС: 0хЕ0008010) 32-битный счетчик предделителя управляет делением синхросигнала pclk на небольшое постоянное значение прежде, чем сигнал счетной частоты поступит на счетчик таймера. Это позволяет управлять разрешающей способностью тай- мера и задавать время переполнения таймера. Счетчик предделителя инкремен- тируется в каждом цикле pclk. Когда он достигает значения, сохраненного в ре- гистре предделителя (PR), счетчик таймера инкрементируется, а счетчик пред- делителя сбрасывается в следующем цикле pclk. Например, ТС будет инкрементироваться в каждом цикле pclk, если PR = 0, каждые 2 цикла pclk, ес- ли PR = 1 и т. д. Регистры совпадения (MR0...MR3) Значение регистра совпадения непрерывно сравнивается со значением счетчика таймера. Когда эти значения равны, автоматически производятся не- которые заданные действия, которые определяются параметрами настройки ре- гистра MCR. Возможные действия состоят в том, чтобы сгенерировать преры- вание, сбросить счетчик таймера или остановить таймер. Регистр управления совпадением (MCR: TIMERO — TOMCR: 0хЕ0004014; TIMER1 - T1MCR: 0хЕ0008014) Регистр управления совпадением используется для того, чтобы задавать, ка- кие операции будут выполнены, когда содержимое одного из регистров совпа- дения станет равным содержимому счетчику таймера. Функции каждого из би- тов регистра управления совпадением приведены в Табл. 15.5. Таблица 15.5. Биты регистра управления совпадением (MCR: TIMERO — TOMCR: 0хЕ0004014; TIMER1 - T1MCR: 0хЕ0008014) Номер бита MCR Функция бита Описание Значение после сброса 0 Прерывание otMRO Когда этот бит установлен, прерывание будет сгенерирова- но, если значение MR0 совпадет со значением ТС. Когда бит сброшен, это прерывание запрещено 0 1 Сброс от MR0 Когда этот бит установлен, ТС будет сброшен, если значе- ние MR0совпадет со значением ТС. Когда бит сброшен, эта возможность не поддерживается 0 2 Останов от MR0 Когда этот бит установлен, ТС и PC будут остановлены и бит TCR[0] будет сброшен, если значение MR0 совпадет со значением ТС. Когда бит сброшен, эта возможность не . поддерживается 0 3 Прерывание от MR1 Когда этот бит установлен, будет сгенерировано прерыва- ние, если значение MR1 совпадет со значением ТС. Когда бит сброшен, это прерывание запрещено 0
15.4. Описание регистров таймеров 293 Таблица 15.5. Биты регистра управления совпадением (MCR: TIMERO — T0MCR: 0хЕ0004014; TIMER1 - T1MCR: 0хЕ0008014) (продолжение) Номер бита MCR Функция бита Описание Значение после сброса 4 Сброс от MR1 Когда этот бит установлен, ТС будет сброшен, если значе- ние MR1 совпадет со значением ТС. Когда бит сброшен, эта возможность не поддерживается 0 5 Останов от MR1 Когда этот бит установлен, ТС и PC будут остановлены и бит TCR[0] будет сброшен, если значение MR1 совпадет со значением ТС. Когда бит сброшен, эта возможность не поддерживается 0 6 Прерывание от MR2 Когда этот бит установлен, будет сгенерировано прерыва- ние, если значение MR2 совпадет со значением ТС. Когда бит сброшен, это прерывание запрещено 0 7 Сброс от MR2 Когда этот бит установлен, ТС будет сброшен, если значе- ние MR2 совпадет со значением ТС. Когда бит сброшен, эта возможность не поддерживается 0 8 Останов от MR2 Когда этот бит установлен, ТС и PC будут остановлены и бит TCR[0] будет сброшен, если значение MR2 совпадет со значением ТС. Когда бит сброшен, эта возможность не поддерживается 0 9 Прерывание от MR3 Когда этот бит установлен, будет сгенерировано прерыва- ние, если значение MR3 совпадет со значением ТС. Когда бит сброшен, это прерывание запрещено 0 10 Сброс от MR3 Когда этот бит установлен, ТС будет сброшен, если значе- ние MR3 совпадет со значением ТС. Когда бит сброшен, эта возможность не поддерживается 0 11 Останов от MR3 Когда этот бит установлен, ТС и PC будут остановлены и бит TCR[0] будет сброшен, если значение MR3 совпадет со значением ТС. Когда бит сброшен, эта возможность не поддерживается 0 Регистры захвата (CRO... CR3) Каждый регистр захвата связан с выводом устройства и может быть загру- жен значением счетчика таймера, когда на этом выводе происходит заданное событие. Параметры настройки в регистре управления захватом определяют, разрешена ли функция захвата и производится ли он по положительному пере- паду (фронту) внешнего сигнала на соответствующем выводе, по отрицательно- му перепаду (спаду) или по обоим перепадам. Регистр управления захватом (CCR: TIMERO — TOCCR: 0хЕ0004028; TIMER1 - T1CCR: 0хЕ0008028) Значения битов в регистре управления захватом задают, загружать ли один из четырех регистров захвата значением счетчика таймера, когда происходит событие, вызывающее захват, и генерировать ли прерывание в случае захвата. Одновременная установка битов управления захватом по положительному пе- репаду (фронту) и битов управления захватом по отрицательному перепаду (спаду) входного сигнала дает возможность производить захват по обоим пере- падам. Функции каждого из битов регистра управления захватом перечислены в Табл. 15.6. Символ «и» в таблице указывает на номер таймера: 0 или 1.
294 Глава 15. Таймеры TIMEROu TIMER1 Таблица 15.6. Биты регистра управления захватом (CCR: TIMER0 — T0CCR: 0хЕ0004028; TIMER1 - T1CCR: 0хЕ0008028) Номер бита CCR Функция бита Описание Значение после сброса 0 Захват по фронту на САРп.О Когда этот бит установлен, положительный фронт входного сигнала (перепад из 0 в 1) на выводе САРп.О инициирует за- грузку в CR0 содержимого ТС. Когда бит сброшен, эта воз- можность заблокирована 0 1 Захват по спа- ду на САРп.О Когда этот бит установлен, спад входного сигнала (перепад из 1 в 0) на выводе САРп.О инициирует загрузку в CR0 содер- жимого ТС. Когда бит сброшен, эта возможность заблокиро- вана 0 2 Прерывание по событию захвата на САРп.О Когда этот бит установлен, при загрузке CR0 (в результате захвата на САРп.О) генерируется прерывание. Когда бит сброшен, эта возможность заблокирована 0 3 Захват по фронту на САРп.1 Когда этот бит установлен, положительный фронт входного сигнала (перепад из 0 в 1) на выводе САРп.1 инициирует за- грузку в CR1 содержимого ТС. Когда бит сброшен, эта воз- можность заблокирована 0 4 Захват по спа- ду на САРп.1 Когда этот бит установлен, спад входного сигнала (перепад из 1 в 0) на выводе САРп. 1 инициирует загрузку в CR1 содер- жимого ТС. Когда бит сброшен, эта возможность заблокиро- вана 0 5 Прерывание по событию захвата на САРп.1 Когда этот бит установлен, при загрузке CR1 (в результате захвата на САРп.1) генерируется прерывание. Когда бит сброшен, эта возможность заблокирована 0 6 Захват по фронту на САРп.2 Когда этот бит установлен, положительный фронт входного сигнала (перепад из 0 в 1) на выводе САРп.2 инициирует за- грузку в CR2 содержимого ТС. Когда бит сброшен, эта воз- можность заблокирована 0 7 Захват по спа- ду на САРп.2 Когда этот бит установлен, спад входного сигнала (перепад из 1 в 0) на выводе САРп.2 инициирует загрузку в CR2 содер- жимого ТС. Когда бит сброшен, эта возможность заблокиро- вана 0 8 Прерывание по событию захвата на САРп.2 Когда этот бит установлен, при загрузке CR2 (в результате захвата на САРп.2) генерируется прерывание. Когда бит сброшен, эта возможность заблокирована 0 9 Захват по фронту на САРп.З Когда этот бит установлен, положительный фронт входного сигнала (перепад из 0 в 1) на выводе САРп.З инициирует за- грузку в CR3 содержимого ТС. Когда бит сброшен, эта воз- можность заблокирована 0 10 Захват по спа- ду на САРп.З Когда этот бит установлен, спад входного сигнала (перепад из 1 в 0) на выводе САРп.З инициирует загрузку в CR3 содер- жимого ТС. Когда бит сброшен, эта возможность заблокиро- вана 0 11 Прерывание по событию ' захвата на САРп.З Когда этот бит установлен, при загрузке CR3 (в результате захвата на САРп.З) генерируется прерывание. Когда бит сброшен, эта возможность заблокирована 0 Регистр внешнего совпадения (EMR: TIMERO — TOEMR: 0хЕ000403С; TIMER1 - T1EMR: 0хЕ000803С) Регистр внешнего совпадения обеспечивает управление состоянием входов внешнего совпадения М (0...3). Битовая структура регистра EMR приведена в Табл. 15.7 и Табл. 15.8.
15.4. Описание регистров таймеров 295 Таблица 15.7. Регистр внешнего совпадения (EMR: TIMERO — T0EMR: 0хЕ000403С; TIMER1 - T1EMR: 0хЕ000803С) Номер бита EMR Функция бита Описание Значение после сброса 9 Внешнее совпадение 0 Этот бит отображает состояние выхода МАТ0.0/МАТ1.0 вне зависимости от того, соеди- нен ли этот выход с соответствующим выводом микроконтроллера. Когда происходит совпадение для MR0, значение сигнала на этом выходе может быть переключено (инвертировано), сброшено, ус- тановлено или остаться без изменений. Соответс- твующее действие определяется состоянием битов EMR[4:5] 0 1 Внешнее совпадение 1 Этот бит отображает состояние выхода МАТ0.1/МАТ1.1 вне зависимости оттого, соеди- нен ли этот выход с соответствующим выводом микроконтроллера. Когда происходит совпадение для MR1, значение сигнала на этом выходе может быть переключено (инвертировано), сброшено, ус- тановлено или остаться без изменений. Соответс- твующее действие определяется состоянием битов EMR[6:7] 0 2 Внешнее совпадение 2 Этот бит отображает состояние выхода МАТ0.2/МАТ1.2 вне зависимости от того, соеди- нен ли этот выход с соответствующим выводом микроконтроллера. Когда происходит совпадение для MR2, значение сигнала на этом выходе может быть переключено (инвертировано), сброшено, ус- тановлено или остаться без изменений. Соответс- твующее действие определяется состоянием битов EMR[8:9] 0 3 Внешнее совпадение 3 Этот бит отображает состояние выхода МАТ0.3/МАТ1.3 вне зависимости оттого, соеди- нен ли этот выход с соответствующим выводом микроконтроллера. Когда происходит совпадение для MR3, значение сигнала на этом выходе может быть переключено (инвертировано), сброшено, ус- тановлено или остаться без изменений. Соответс- твующее действие определяется состоянием битов EMR[10:ll] 0 5:4 Управление внешним сов- падением 0 Определяет функциональные возможности вне- шнего совпадения 0. В Табл. 15.8 приведены кодо- вые значения этих битов и соответствующие им действия 0 7:6 Управление внешним сов- падением 1 Определяет функциональные возможности вне- шнего совпадения 0. В Ткбл. 15.8 приведены кодо- вые значения этих битов и соответствующие им действия 0 9:8 Управление внешним сов- падением 2 Определяет функциональные возможности вне- шнего совпадения 0. В Табл. 15.8 приведены кодо- вые значения этих битов и соответствующие им действия 0 11:10 Управление внешним сов- падением 3 Определяет функциональные возможности вне- шнего совпадения 0. В Ткбл. 15.8 приведены кодо- вые значения этих битов и соответствующие им действия 0
296 Глава 15. Таймеры TIMERO и TIMER1 Таблица 15.8. Управление внешним совпадением с помощью битов внешнего совпадения EMR EMR [11:10], EMR [9:8], EMR [7:6], EMR [5:4] Функция 00 Ничего не происходит 01 Сбрасывается выход внешнего совпадения (если он скоммутирован на вывод микроконтроллера, то этот вывод также сбрасывается) 10 Устанавливается выход внешнего совпадения (если он скоммутирован на вывод микроконтроллера, то этот вывод также устанавливается) 11 Выход внешнего совпадения переключает свое состояние на противопо- ложное (инвертируется) 15.5. Пример операций таймера На Рис. 15.2 .изображен таймер, сконфигурированный таким образом, что- бы сбросить счетчик таймера и сгенерировать прерывание при совпадении. Для предделителя задано значение 2, а в регистре совпадения содержится значение 6. В момент совпадения (т. е. когда текущее значение счетчика таймера равно содержимому регистра совпадения) счетчик таймера сбрасывается и затем про- цесс счета повторяется до следующего совпадения. В результате, полный цикл счета имеет длительность (в циклах счетчика таймера), равную увеличенному на 1 значению, заданному в регистре совпадения (в данном случае — 6+1 = 7). Вызванное совпадением прерывание генерируется в следующем тактовом цик- ле pclk после того, как счетчик таймера достиг значения, заданного в регистре совпадения. Счетчик предделителя Счетчик таймера Сброс счетчика таймера Прерывание Рис. 15.2. Конфигурация таймера, соответствующая сбросу счетчика таймера и генерации прерывания при совпадении
15.5. Пример операций таймера 297 Рис, 15.3, Конфигурация таймера, соответствующая останову счетчика таймера и генерации прерывания при совпадении На Рис. 15.3 изображен таймер, сконфигурированный таким образом, чтобы остановить счетчик таймера и сгенерировать прерывание при совпадении. Для предделителя также задано значение 2, а для регистра совпадения — значение 6. В следующем тактовом цикле после того, как таймер достигает значения, задан- ного в регистре совпадения, бит разрешения счета таймера TCR[0] сбрасывается и генерируется прерывание, инициированное произошедшим совпадением.
ГЛАВА 1 6 ШИРОТНО-ИМПУЛЬСНЫЙ МОДУЛЯТОР (PWM) Реализация модуля широтно-импульсного модулятора (PWM) микроконт- роллеров семейства LPC2000 основана на использовании стандартного модуля таймера, подобного описанному в предыдущей главе Таймеру 0/1. Пользователь- ское приложение может произвести включение PWM и настроить его параметры. 16.1. Основные функциональные характеристики Модуль PWM микроконтроллеров LPC2000 имеет следующие особенности: 1. Семь регистров совпадения позволяют сформировать на выходах PWM до шести отдельных управляемых перепадов, или до трех двойных перепадов, или комбинировать эти типы сигналов. Регистры совпадения модуля PWM также позволяют: • непрерывно производить сравнение со значением счетчика таймера PWM, с возможностью генерации прерывания при совпадении; • останавливать таймер при совпадении, с возможностью генерации пре- рывания; • сбрасывать таймер при совпадении, с возможностью генерации прерыва- ния. 2. Внешний выход для каждого регистра совпадения обладает следующими функциональными возможностями: • сброс при совпадении; • установка при совпадении; • переключение уровня (инверсия) при совпадении; • сохранение текущего состояния при совпадении. 3. Поддержка одного управляемого перепада и/или двойного управляемого перепада на выходах PWM. При управлении одним перепадом все выходы PWM устанавливаются в начале каждого цикла, если только выход не явля- ется постоянно сброшенным. При управлении двойным перепадом на вы- ходах могут быть любые перепады, которые могут происходить в любые мо- менты времени в течение цикла. Это касается и положительных, и отрицательных импульсов. 4. Период импульса и его ширина могут быть равны любому количеству пери- одов счетных импульсов таймера. Это позволяет достичь гибкости в соотно- шении между разрешающей способностью и периодом повторения выход- ной последовательности. Все выходы PWM всегда имеют одинаковый период повторения выходной последовательности.
16.2. Структура и общее описание модуля PWM 299 5. Двойной управляемый перепад на выходах PWM может быть запрограмми- рован, чтобы получить положительные или отрицательные импульсы вы- ходной последовательности. 6. Обновления регистра совпадения синхронизированы с изменениями состо- яния выходов PWM, чтобы предотвратить формирование ошибочных им- пульсов. Пользовательское программное обеспечение должно загрузить но- вые значения в регистр совпадения прежде, чем они могут вступить в силу. 7. Модуль PWM может использоваться как стандартный таймер, если режим PWM не разрешен. 8. 32-битный таймер/счетчик с программируемым 32-битным предделителем. 9. Четыре 32-битных канала захвата производят захват (копирование) текуще- го значения таймера при заданных изменениях входных сигналов. Имеется также возможность при захвате генерировать прерывание. 16.2. Структура и общее описание модуля PWM Модуль PWM реализован на основе стандартного таймера и наследует все его особенности. Таймер PWM предназначен для подсчета периода периферий- ных тактовых импульсов (pclk), и имеет возможность генерировать прерывания или выполнять другие действия в случаях, когда его значение достигает задан- ных величин, определяемых содержимым семи регистров совпадения PWM. Модуль PWM также включает в себя четыре входа захвата, позволяющие захва- тывать (копировать) текущее значение таймера при поступлении заданных из- менений входных сигналов, а также генерировать прерывание, когда происхо- дит захват. Как и все перечисленные функции, функция широтно-импульсной модуляции базируется на использовании регистров совпадения. Способность раздельно управлять положительным и отрицательным пере- падами позволяет использовать PWM LPC2000 в большом количестве приложе- ний. Например, управление многофазными электродвигателями, как правило, требует трех раздельных выходов ШИМ с индивидуальным управлением дли- тельностью и фазой выходных импульсов по каждому выходу, что и позволяет реализовать PWM микроконтроллеров LPC2000. В общем случае, требуется два регистра совпадения, чтобы управлять оди- ночным перепадом на одном выходе PWM. Один регистр совпадения (PWMMR0) управляет периодом выходной последовательности PWM, сбрасы- вая счет при совпадении. Другой регистр совпадения управляет положением относительно начала этого периода одиночного перепада выходного сигнала PWM, задавая, таким образом, длительность выходных импульсов PWM. Для управления одиночным перепадом на одном выходе PWM может потребовать- ся и только один регистр совпадения, если период выходной последователь- ности одинаков для всех выходов PWM и, следовательно, может задаваться од- ним, общим для всех выходов, регистром совпадения (PWMMR0). В этом слу- чае, сигналы на всех выходах PWM будут устанавливаться в начале каждого цикла PWM, когда происходит совпадение значения таймера со значением PWMMR0. Чтобы управлять двумя перепадами на одном выходе PWM, требуется три регистра совпадения. Как и в предыдущем случае, регистр PWMMR0 управляет периодом выходной последовательности PWM. Другие два регистра совпадения
Регистр совпадения О Регистр совпадения 1 Регистр совпадения 2 Регистр совпадения 3 Регистр совладей ия4 Регистр совпадения 5 Регистр совпадения 6 Теневой регистр О Разрешение загрузки Теневой регистр 1 Разрешение загрузки Теневой регистр 2 Разрешение загрузки Теневой регистр 3 Разрешение загрузки Теневой регистр 4 Разрешение загрузки Теневой регистр 5 Разрешение загрузки Теневой регистр 6 j-» Разрешение загрузки I дениеО I I I I Регистр упр. защелкиванием Очистка | Регистр прерываний | Прерывание RESET * Управление — Стоп при совпадении г— Сброс при совпадении | Регистр упр. таймеро~м ENABLE | CSN.,--------1—------. q Счетчик таймера I ------t CE & о 5 Совпадение О Совпа- дение 1 Совпа- дение 2 Совпа- дение 3 Совпа- дение 4 Совпа- дение 5 R Q S EN PWMSEL2 R Q —► SEN«- PWMSEL3 R Q s™ PWMSEL4 R Q sEN — PWMSEL5 R Q —► mux Совпадение 6 PWMENA1...6 PWMSEL2...6 | Регистр управления PWM Рис. 16.1. Блок-схема модуля PWM микроконтроллеров семейства LPC2000 SEN — PWMSEL6 R Q SEN«- PWM1 PWMENA1 PWM2 PWMENA2 PWM3 PWMENA3 PWM4 PWMENA4 PWM5 PWMENA5 PWM6 PWMENA6 300 Глава 16. Широтно-импульсный модулятор (PWM)
16.2. Структура и общее описание модуля PWM 301 управляют положениями относительно начала периода положительного и от- рицательного перепадов выходного сигнала PWM, задавая, таким образом, дли- тельность, фазу и полярность выходных импульсов PWM. Как и в предыдущем случае, если период выходной последовательности одинаков для всех выходов PWM, то для управления двумя перепадами на одном выходе PWM требуется только два регистра совпадения. Управление двумя перепадами на одном выхо- де PWM позволяет формировать на этом выходе как положительные (положи- тельный перепад предшествует отрицательному), так и отрицательные (отрица- тельный перепад предшествует положительному) импульсы. Блок-схема PWM микроконтроллеров LPC2000 приведена на Рис. 16.1. Как можно видеть из рисунка, в составе модуля PWM, по сравнению со стандарт- ным блоком таймера (см. Рис. 15.3), имеются дополнительные узлы. Как показано на Рис. 16.1, выбор управления одиночным или двойным пе- репадом выходного сигнала PWM производится мультиплексорами (mux), уп- равляемыми битами PWMSELn. На Рис. 16.2 изображен пример выборки выходных сигналов PWM, на кото- ром можно проиллюстрировать взаимосвязь между значениями регистров сов- падения и параметрами формируемых сигналов. Состояние отдельных выходов PWM будет циклически меняться, как изображено на рисунке, при следующих условиях: • таймер сконфигурирован для режима PWM; • регистр совпадения 0 сконфигурирован, чтобы сбрасывать счетчик тай- мера при наступлении совпадения; • служебные биты PWMSEL2 и PWMSEL4 установлены; • регистры совпадения PWM должны иметь следующие значения: MR0 = 100 (период выходной последовательности PWM), MR1 = 41, MR2 = 78 (для выхода PWM2), MR3 = 53, MR4 = 27 (для выхода PWM4), MR5 = 65 (для выхода PWM5). Рис. 16.2. Пример выборки выходных сигналов модуля PWM Соответствие регистров PWM выходам PWM приведено в Табл. 16.1. Мо- дуль PWM поддерживает управление до (N— 1) одиночными перепадами на своих выходах или до (N — 1 )/2 двойными перепадами, где N — количество име- ющихся в модуле PWM регистров совпадения. Поддерживается также управле- ние смешанного типа, если в этом есть необходимость.
302 Глава 16. Широтно-импульсный модулятор (PWM) Таблица 16.1. Соответствие между регистрами и выходами (каналами) модуля PWM Канал PWM Одиночный перепад PWM (PWMSELn = 0) Двойной перепад PWM (PWMSELn = 1) Установка Сброс Установка Сброс 1 Совпадение 0 Совпадение 1 Совпадение 0° Совпадение 2 Совпадение 0 Совпадение 2 Совпадение 1 Совпадение 2 з’ Совпадение 0 Совпадение 3 Совпадение 22) Совпадение 32) 4 Совпадение 0 Совпадение 4 Совпадение 3 Совпадение 4 5 Совпадение 0 Совпадение 5 Совпадение 42) Совпадение 52) 6 Совпадение 0 Совпадение 6 Совпадение 5 Совпадение 6 } Этот случай идентичен режиму управления одиночным перепадом, так как в канале PWM1 отсутствует мультиплексор выбора режима управления двойным перепадом. Таким образом, ка- нал PWM1 не поддерживает управление двойным перепадом. 2) Каналы PWM3 и PWM5 нецелесообразно использовать для формирования сигналов с двойным управляемым перепадом, поскольку из-за особенностей построения внутренней логи- ки PWM (см. Рис. 16.1) в результате их использования уменьшается общее количество каналов PWM, поддерживающих управление двойным перепадом. Для формирования сигналов с двой- ным управляемым перепадом рекомендуется использовать каналы PWM2, PWM4 и PWM6. 16.2.1 . Правила изменения выходного сигнала в канале PWM с управлением одиночным перепадом При управлении одиночным перепадом в канале PWM состояние выхода этого канала подчиняется следующим правилам: 1. Сигнал на выходе PWM будет переходить в ВЫСОКИЙ уровень в начале цик- ла PWM, если значение соответствующего регистра совпадения не равно 0. 2. Сигнал на выходе PWM будет переходить в НИЗКИЙ уровень в момент сов- падения значений таймера и соответствующего регистра совпадения. Если совпадение вообще не наступает (т. е. значение регистра совпадения боль- ше, чем значение периода выходной последовательности PWM), состояние выхода PWM останется ВЫСОКИМ. 16.2.2 . Правила изменения выходного сигнала в канале PWM с управлением двойным перепадом При управлении двойным перепадом в канале PWM состояние выхода этого канала подчиняется следующим правилам: 1. Значения регистров совпадения для следующего цикла PWM используются (становятся активными) в конце цикла PWM (в момент времени, совпадаю- щий с началом следующего цикла PWM), кроме случая, указанного в Пра- виле 3. 2. Значение регистра совпадения, равное 0 или периоду выходной последова- тельности PWM (или, что то же самое, значению регистра совпадения кана- ла PWM0) приведет к тому же самому эффекту, что и ситуация, указанная в оговорке Правила 3. Например, задание отрицательного перепада в начале цикла PWM приведет к тому же эффекту, что и задание отрицательного пе- репада в конце цикла PWM.
16.3. Описание выводов PWM 303 3. Если при изменении значений регистра совпадения одно из «старых» значе- ний было равно периоду выходной последовательности PWM, то это значе- ние будет использовано при формировании выходного сигнала еще в одном периоде (когда ни одно из новых значений регистра совпадения не равно 0 или периоду выходной последовательности PWM, и ни одно из «старых» значений регистра совпадения не равнялось 0). 4. Если установка и сброс состояния выхода PWM заданы в один и тот же мо- мент, то сброс в этом случае имеет более высокий приоритет. Такая ситуация может иметь место, когда значения совпадения для положительного и отри- цательного перепадов равны или когда значение регистра совпадения для положительного или отрицательного перепадов равно 0, а другое значение равно периоду выходной последовательности PWM. 5. Если значение регистра совпадения лежит вне диапазона (т. е. больше пери- ода выходной последовательности PWM), то совпадение никогда не насту- пает и уровень выходного сигнала в данном канале PWM остается постоян- ным. 16.3. Описание выводов PWM Выводы микроконтроллера, связанные с модулем PWM, перечислены в Табл. 16.2. Таблица 16.2. Выводы модуля PWM микроконтроллеров семейства LPC2000 Название вывода Направление вывода Описание вывода PWM1 Выход Выход PWM канала 1 PWM2 Выход Выход PWM канала 2 PWM3 Выход Выход PWM канала 3 , PWM4 Выход Выход PWM канала 4 PWM5 Выход Выход PWM канала 5 PWM6 Выход Выход PWM канала 6 16.4. Описание регистров PWM Регистры, относящиеся к модулю PWM, перечислены в Табл. 16.3. Таблица 16.3. Карта регистров PWM Название Описание Доступ Значение после сброса0 Адрес (в шест- надцатиричном формате) PWMIR Регистр прерываний от PWM. Регистр PWMIR мо- жет быть записан, чтобы сбросить прерывания, и может быть прочитан, чтобы определить, запросы от каких источников прерывания поступили R/W 0 ОхЕОО 14000 PWMTCR Регистр управления PWM. Регистр PWMTCR ис- пользуется, чтобы управлять функциями счетчика таймера. Счетчик таймера может быть заблокирован или сброшен с помощью PWMTCR R/W 0 0хЕ0014004
304 Глава 16. Широтно-импульсный модулятор (PWM) Таблица 16.3. Карта регистров PWM (продолжение) Название Описание Доступ Значение после сброса1* Адрес (в шест- надцатиричном формате) PWMTC Счетчик таймера PWM. 32-битный регистр PWMTC инкрементируется через каждые (PR+1) циклов pclk, где PR — значение регистра PWMPR. Регистр PWMTC управляется с помощью регистра PWMTCR R/W 0 OxEOOl 4008 PWMPR Регистр предделителя PWM. Регистр PWMTC инк- рементируется каждые (PR+1) циклов pclk R/W 0 ОхЕООМООС PWMPC Счетчик предделителя PWM 32-битный регистр PWMPC инкрементируется до значения, содержа- щегося в регистре PWMPR. Когда значение PWMPC становится равным значению PWMPR, инкремен- тируется счетчик PWMTC R/W 0 0хЕ0014010 PWMMCR Регистр управления совпадением PWM. Регистр PWMMCR используется, чтобы управлять возмож- ностью генерации прерывания при сбросе PWMTC и наступлении совпадения R/W 0 0хЕ0014014 PWMMR0 Регистр совпадения 0 PWM. Для регистра PWMMR0 можно разрешить через регистр PWMMCR сброс PWMTC, останов PWMTC и PWMPC и/или генера- цию прерывания, когда значение PWMMR0 совпа- дает с текущим значением PWMTC. Кроме того, совпадение значений PWMMR0 и PWMTC устанав- ливает ВЫСОКИЕ уровни на всех выходах PWM, которые находятся в режиме управления одиноч- ным перепадом и устанавливает ВЫСОКИЙ уро- вень на выходе PWM1, если он находится в режиме управления двойным перепадом R/W 0 0хЕ0014018 PWMMR1 Регистр совпадения 1 PWM. Для регистра PWMMR1 можно разрешить через регистр PWMMCR сброс PWMTC, останов PWMTC и PWMPC и/или генера- цию прерывания, когда значение PWMMR1 совпа- дает с текущим значением PWMTC. Кроме того, совпадение значений PWMMR1 и PWMTC сбрасы- вает выход PWM1 в любом режиме управления пере- падами и устанавливает ВЫСОКИЙ уровень на вы- ходе PWM2, если он находится в режиме управления двойным перепадом R/W 0 0хЕ001401С PWMMR2 Регистр совпадения 2 PWM. Для регистра PWMMR2 можно разрешить через регистр PWMMCR сброс PWMTC, останов PWMTC и PWMPC и/или генера- цию прерывания, когда значение PWMMR2 совпа- дает с текущим значением PWMTC. Кроме того, совпадение значений PWMMR2 и PWMTC сбрасы- вает выход PWM2 в любом режиме управления пере- падами и устанавливает ВЫСОКИЙ уровень на вы- ходе PWM3, если он находится в режиме управления двойным перепадом R/W 0 OxEOOl 4020 PWMMR3 Регистр совпадения 3 PWM. Для регистра PWMMR3 можно разрешить через регистр PWMMCR сброс PWMTC, останов PWMTC и PWMPC и/или генера- цию прерывания, когда значение PWMMR3 совпа- дает с текущим значением PWMTC. Кроме того, совпадение значений PWMMR3 и PWMTC сбрасы- вает выход PWM3 в любом режиме управления пере- падами и устанавливает ВЫСОКИЙ уровень на вы- ходе PWM4, если он находится в режиме управления двойным перепадом R/W 0 OxEOOl4024
16.4. Описание регистров PWM 305 Таблица 16.3. Карта регистров PWM (продолжение) Название Описание Доступ Значение после сброса^ Адрес (в шест- надцатиричном формате) PWMMR4 Регистр совпадения 4 PWM. Для регистра MR4 можно разрешить через регистр MCR сброс ТС, останов ТС и PC и/или генерацию прерывания, когда значение MR4 совпадает с текущим значени- ем ТС. Кроме того, совпадение значений MR4 и ТС сбрасывает выход PWM4 в любом режиме управления перепадами и устанавливает ВЫСОКИЙ уровень на выходе PWM5, если он находится в режиме управления двойным перепадом R/W 0 0хЕ0014040 PWMMR5 Регистр совпадения 5 PWM. Для регистра PWMMR5 можно разрешить через регистр PWMMCR сброс PWMTC, останов PWMTC и PWMPC и/или генерацию прерывания, когда значение PWMMR5 совпадает с текущим значением PWMTC. Кроме того, совпадение значений PWMMR5 и PWMTC сбрасывает выход PWM5 в любом режиме управления перепадами и устанав- ливает ВЫСОКИЙ уровень на выходе PWM6, если он находится в режиме управления двойным перепадом R/W 0 0хЕ0014044 PWMMR6 Регистр совпадения 6 PWM. Для регистра PWMMR6 можно разрешить через регистр PWMMCR сброс PWMTC, останов PWMTC и PWMPC и/или генерацию прерывания, когда значение PWMMR6 совпадает с текущим значением PWMTC. Кроме того, совпадение значений PWMMR6 и PWMTC сбрасывает выход PWM6 в любом режиме управления перепадами R/W 0 0хЕ0014048 PWMPCR Регистр управления PWM. Разрешает использова- ние выводов микроконтроллера в качестве выходов PWM и выбирает канал PWM для управления оди- ночным или двойным перепадом R/W 0 0хЕ001404С PWMLER Регистр разрешения «защелкивания» PWM. Разре- шает использование (активацию) новых значений совпадения PWM R/W 0 0хЕ0014050 ° Значение после сброса относится к данным, сохраненным только в используемых битах. Значения зарезервированных битов не учитываются. Регистр прерываний от PWM (PWMIR — ОхЕО014000) Регистр прерываний PWM включает в себя одиннадцать значащих би- тов (см. Табл. 16.4.), из которых семь обслуживают прерывания при совпа- дении, а четыре зарезервированы для перспективного использования. Если прерывание сгенерировано, то устанавливается соответствующий бит в PWMIR. В противном случае, этот бит сброшен. Запись логической еди- ницы в установленный значащий бит регистра PWMIR сбросит соответс- твующее прерывание. Запись логического нуля не будет иметь никакого эффекта. Битовая структура регистра PWMIR приведена в Табл. 16.4.
306 Глава 16. Широтно-импульсный модулятор (PWM) Таблица 16.4. Биты регистра прерываний от PWM (PWMIR — 0хЕ0014000) Биты регистра PWMIR Функция бита Описание Значение после сброса 0 Прерывание PWMMR0 Флаг прерывания при совпадении в канале 0 PWM 0 1 Прерывание PWMMR1 Флаг прерывания при совпадении в канале 1 PWM 0 2 Прерывание PWMMR2 Флаг прерывания при совпадении в канале 2 PWM 0 3 Прерывание PWMMR3 Флаг прерывания при совпадении в канале 3 PWM 0 4 Зарезервирован Приложение не должно записывать 1 в этот бит 0 5 Зарезервирован Приложение не должно записывать 1 в этот бит 0 6 Зарезервирован Приложение не должно записывать 1 в этот бит 0 7 Зарезервирован Приложение не должно записывать 1 в этот бит 0 8 Прерывание PWMMR4 Флаг прерывания при совпадении в канале 4 PWM 0 9 Прерывание PWMMR5 Флаг прерывания при совпадении в канале 5 PWM 0 10 Прерывание PWMMR6 Флаг прерывания при совпадении в канале 6 PWM 0 Регистр управления таймером PWM (PWMTCR — OxEOOl4004) Регистр PWMTCR используется, чтобы управлять функциями счетчика таймера. Битовая структура регистра PWMTCR приведена в Табл. 16.5. Таблица 16.5. Биты регистра управления таймером PWM (PWMTCR — 0хЕ0014004) Биты регистра PWMTCR Функция бита Описание Значение после сброса 0 Разреше- ние счет- чика Когда этот бит установлен, разрешен счет счетчику тай- мера и счетчику предделителя PWM. Когда бит сброшен, эти счетчики заблокированы 0 1 Сброс счетчика Когда этот бит установлен, счетчик таймера и счетчик предделителя PWM синхронно сбрасываются по следую- щему положительному перепаду (фронту) pclk. Счетчики остаются в сброшенном состоянии вплоть до обнуления бита PWMTCRfl] 0 2 Зарезерви- рован Пользовательское программное обеспечение не должно производить запись в зарезервированные биты. Чтение зарезервированного бита возвращает неопределенное значение NA 3 Разреше- ние PWM Когда этот бит установлен, режим PWM разрешен. В ре- жиме PWM теневые регистры подключаются к регистрам совпадения. Программная запись в регистр совпадения не окажет влияния на результат совпадения, пока соот- ветствующий бит в PWMLER не будет установлен, а так- же пока не произойдет совпадение в канале PWM 0. Обратите внимание, что регистр совпадения PWM, кото- рый определяет период выходной последовательности PWM (регистр совпадения PWM 0), должен быть иници- ализирован до разрешения PWM. В противном случае, в канале PWM 0 не произойдет совпадения и, следователь- но, содержимое теневого регистра не будет задействовано 0
16.4. Описание регистров PWM 307 Счетчик таймера PWM (PWMTC - OxEOOl4008) 32-битный счетчик таймера PWM инкрементируется, когда счетчик предде- лителя достигает своего конечного состояния. Если PWMTC не будет сброшен до достижения своего верхнего предела, то он переполнится значением OxFFFFFFFF, а затем сбросится в значение 0x00000000. Этот случай не вызовет прерывания, однако если необходимо обнаружить такое переполнение, можно использовать регистр совпадения. Регистр предделителя PWM (PWMPR — OxEOOl400С) 32-битный регистр счетчика предделителя PWM определяет максимальное значение для счетчика предделителя PWM. Счетчик предделителя PWM (PWMPC — ОхЕО014010) 32-битный счетчик предделителя PWM осуществляет деление тактовой час- тоты pclk на некоторую константу (значение которой задается в регистре PWMPC), а полученные в результате этого синхроимпульсы поступают на счет- чик таймера PWM. Это позволяет управлять разрешающей способностью тай- мера, задавая максимальное время переполнения таймера. Счетчик преддели- теля PWM инкрементируется в каждом периоде pclk. Когда он достигает значе- ния, содержащегося в регистре предделителя PWM, счетчик таймера PWM инкрементируется, а счетчик предделителя PWM сбрасывается в следующем периоде pclk. Например, PWMTC будет инкрементироваться в каждом периоде pclk, когда PWMPR = 0, каждые два периода pclks, когда PWMPR = 1 и т. д. Регистры совпадения PWM (PWMMRO ~ PWMMR6) Значение регистра совпадения PWM непрерывно сравнивается со значени- ем счетчика таймера PWM. Когда эти два значения равны, автоматически про- изводятся некоторые заданные действия. Возможные действия заключаются в том, чтобы сгенерировать прерывание, сбросить счетчик таймера PWM или ос- тановить таймер. Выбор конкретного действия задается параметрами настрой- ки в регистре PWMMCR. Регистр управления совпадением PWM (PWMMCR — OxEOOl40) Регистр управления совпадения PWM используется, чтобы определить, ка- кие операции должны быть выполнены, когда значение одного из регистров PWM совпадает со значением счетчика таймера PWM. Битовая структура регистра PWMMCR приведена в Табл. 16.6. Таблица 16.6. Битовая структура регистра управления совпадением PWM (PWMMCR - 0хЕ0014014) Биты регистра PWMMCR Функция бита Описание Значение после сброса 0 Включение прерывания от PWMMRO Когда данный бит установлен, то в случае совпадения значе- ний PWMMRO и PWMTC генерируется прерывание. Когда данный бит сброшен, это прерывание запрещено 0 1 Включение сброса от PWMMRO Когда данный бит установлен, то в случае совпадения значе- ний PWMMRO и PWMTC последний сбрасывается. Когда данный бит сброшен, сброс PWMTC не производится 0
308 Глава 16. Широтно-импульсный модулятор (PWM) Таблица 16.6. Битовая структура регистра управления совпадением PWM (PWMMCR — 0хЕ0014014) (продолжение) Биты регистра PWMMCR Функция бита Описание Значение после сброса 2 Включение останова от PWMMR0 Когда данный бит установлен, то в случае совпадения значе- ний PWMMR0 и PWMTC счетчики PWMTC и PWMPC будут остановлены, а бит PWMTCR[0] будет сброшен. Когда дан- ный бит сброшен, указанные действия не происходят 0 3 Включение прерывания от PWMMR1 Когда данный бит установлен, то в случае совпадения значе- ний PWMMR1 и PWMTC генерируется прерывание. Когда данный бит сброшен, это прерывание запрещено 0 4 Включение сброса от PWMMR1 Когда данный бит установлен, то в случае совпадения значе- ний PWMMR1 и PWMTC последний сбрасывается. Когда данный бит сброшен, сброс PWMTC не производится 0 5 Включение останова от PWMMR1 Когда данный бит установлен, то в случае совпадения значе- ний PWMMR1 и PWMTC счетчики PWMTC и PWMPC будут остановлены, а бит PWMTCR[0] будет сброшен. Когда дан- ный бит сброшен, указанные действия не происходят 0 6 Включение прерывания от PWMMR2 Когда данный бит установлен, то в случае совпадения значе- ний PWMMR2 и PWMTC генерируется прерывание. Когда данный бит сброшен, это прерывание запрещено 0 7 Включение сброса от PWMMR2 Когда данный бит установлен, то в случае совпадения значе- ний PWMMR2 и PWMTC последний сбрасывается. Когда данный бит сброшен, сброса PWMTC не происходит. 0 8 Включение останова от PWMMR2 Когда данный бит установлен, то в случае совпадения значе- ний PWMMR2 и PWMTC счетчики PWMTC и PWMPC будут остановлены, а бит PWMTCR[0] будет сброшен. Когда дан- ный бит сброшен, указанные действия не происходят 0 9 Включение прерывания от PWMMR3 Когда данный бит установлен, то в случае совпадения значе- ний PWMMR3 и PWMTC генерируется прерывание. Когда данный бит сброшен, это прерывание запрещено 0 10 Включение сброса от PWMMR3 Когда данный бит установлен, то в случае совпадения значе- ний PWMMR3 и PWMTC последний сбрасывается. Когда данный бит сброшен, сброса PWMTC не происходит 0 11 Включение останова от PWMMR3 Когда данный бит установлен, то в случае совпадения значе- ний PWMMR3 и PWMTC счетчики PWMTC и PWMPC будут остановлены, а бит PWMTCR[0] будет сброшен. Когда дан- ный бит сброшен, указанные действия не происходят. 0 12 Включение прерывания от PWMMR4 Когда данный бит установлен, то в случае совпадения значе- ний PWMMR4 и PWMTC генерируется прерывание. Когда данный бит сброшен, это прерывание запрещено 0 13 Включение сброса от PWMMR4 Когда данный бит установлен, то в случае совпадения значе- ний PWMMR4 и PWMTC последний сбрасывается. Когда данный бит сброшен, сброса PWMTC не происходит 0 14 Включение останова от PWMMR4 Когда данный бит установлен, то в случае совпадения значе- ний PWMMR4 и PWMTC счетчики PWMTC и PWMPC будут остановлены, а бит PWMTCR[0] будет сброшен. Когда дан- ный бит сброшен, указанные действия не происходят 0 15 Включение прерывания от PWMMR5 Когда данный бит установлен, то в случае совпадения значе- ний PWMMR5 и PWMTC генерируется прерывание. Когда данный бит сброшен, это прерывание запрещено 0 16 Включение сброса от PWMMR5 Когда данный бит установлен, то в случае совпадения значе- ний PWMMR5 и PWMTC последний сбрасывается. Когда данный бит сброшен, сброса PWMTC не происходит 0
16.4. Описание регистров PWM 309 Таблица 16.6. Битовая структура регистра управления совпадением PWM (PWMMCR — 0хЕ0014014) (продолжение) Биты регистра PWMMCR Функция бита Описание Значение после сброса 17 Включение останова от PWMMR5 Когда данный бит установлен, то в случае совпадения значе- ний PWMMR5 и PWMTC счетчики PWMTC и PWMPC будут остановлены, а бит PWMTCRJ0] будет сброшен. Когда дан- ный бит сброшен, указанные действия не происходят 0 18 Включение прерывания от PWMMR6 Когда данный бит установлен, то в случае совпадения значе- ний PWMMR6 и PWMTC генерируется прерывание. Когда данный бит сброшен, это прерывание запрещено 0 19 Включение сброса от PWMMR6 Когда данный бит установлен, то в случае совпадения значе- ний PWMMR6 и PWMTC последний сбрасывается. Когда данный бит сброшен, сброса PWMTC не происходит 0 20 Включение останова от PWMMR6 Когда данный бит установлен, то в случае совпадения значе- ний PWMMR6 и PWMTC счетчики PWMTC и PWMPC будут остановлены, а бит PWMTCR[0] будет сброшен. Когда дан- ный бит сброшен, указанные действия не происходят 0 Регистр управления PWM (PWMPCR — OxEOOl404С) Регистр управления PWM PWMPCR используется для выбора типа каждого канала PWM и разрешения работы каждого канала. Битовая структура регистра PWMPCR приведена в Табл. 16.7. Таблица 16.7. Битовая структура регистра управления PWM (PWMPCR - OxEOOl404С) Биты регистра PWMPCR Функция бита Описание Значение после сброса 1:0 Зарезервиро- ваны Пользовательское программное обеспечение не должно про- изводить запись в зарезервированные биты. Чтение зарезер- вированного бита возвращает неопределенное значение NA 2 PWMSEL2 Когда этот бит сброшен, выбирается режим управления оди- ночным перепадом для выхода PWM2. Когда этот бит уста- новлен, выбирается режим управления двойным перепадом для выхода PWM2 0 3 PWMSEL3 Когда этот бит сброшен, выбирается режим управления оди- ночным перепадом для выхода PWM3. Когда этот бит уста- новлен, выбирается режим управления двойным перепадом для выхода PWM3 0 4 PWMSEL4 Когда этот бит сброшен, выбирается режим управления оди- ночным перепадом для выхода PWM4. Когда этот бит уста- новлен, выбирается режим управления двойным перепадом для выхода PWM4 0 5 , PWMSEL5 Когда этот бит сброшен, выбирается режим управления оди- ночным перепадом для выхода PWM5. Когда этот бит уста- новлен, выбирается режим управления двойным перепадом для выхода PWM5 0 6 PWMSEL6 Когда этот бит сброшен, выбирается режим управления оди- ночным перепадом для выхода PWM6. Когда этот бит уста- новлен, выбирается режим управления двойным перепадом для выхода PWM6 0 8:7 Зарезервиро- ваны Пользовательское программное обеспечение не должно про- изводить запись в зарезервированные биты. Чтение зарезер- вированного бита возвращает неопределенное значение NA
310 Глава 16. Широтно-импульсный модулятор (PWM) Таблица 16.7. Битовая структура регистра управления PWM (PWMPCR — 0хЕ001404С) (продолжение) Биты регистра PWMPCR Функция бита Описание Значение после сброса 9 PWMENA1 Когда этот бит установлен, выход PWM1 включен. Когда этот бит сброшен, выход PWM1 отключен 0 10 PWMENA2 Когда этот бит установлен, выход PWM2 включен. Когда этот бит сброшен, выход PWM2 отключен 0 1 11 PWMENA3 Когда этот бит установлен, выход PWM3 включен. Когда этот бит сброшен, выход PWM3 отключен 0 12 PWMENA4 Когда этот бит установлен, выход PWM4 включен. Когда этот бит сброшен, выход PWM4 отключен 0 13 PWMENA5 Когда этот бит установлен, выход PWM5 включен. Когда этот бит сброшен, выход PWM5 отключен 0 14 PWMENA6 Когда этот бит установлен, выход PWM6 включен. Когда этот бит сброшен, выход PWM6 отключен 0 15 Зарезервиро- ван Пользовательское программное обеспечение не должно про- изводить запись в зарезервированные биты. Чтение зарезер- вированного бита возвращает неопределенное значение NA Регистр разрешения «защелкивания» PWM (PWMLER — OxEOOl4050) Регистр разрешения «защелкивания» PWM применяется, чтобы управлять обновлением регистров совпадения PWM, когда они используются для генера- ции выходных импульсных последовательностей PWM. Когда программа поль- зователя производит запись в регистр совпадения PWM и таймер находится в режиме PWM, записываемое значение первоначально попадает в теневой ре- гистр. Содержимое теневых регистров копируется в регистры совпадения, когда происходит совпадение в канале PWM0 (обычно в этот момент также происхо- дит сброс таймера в режиме PWM), но только если соответствующий бит в ре- гистре разрешения «защелкивания» был предварительно установлен. В этот мо- мент новые значения регистров совпадения вступают в силу и определяют па- раметры выходных сигналов следующего цикла PWM. Как только происходит активация новых значений регистров совпадения, все биты регистра PWMLER автоматически сбрасываются. Пока соответствующий бит в регистре PWMLER не установлен и совпадение в канале PWM 0 не произошло, запись любого зна- чения в регистры совпадения PWM не окажет никакого влияния на работу мо- дуля PWM. Например, если канал PWM2 конфигурирован для управления двойным пе- репадом и функционирует в данный момент, то типичная последовательность событий для изменения параметров выходной последовательности в этом кана- ле может иметь следующий вид: „, 1. Запись нового значения в регистр совпадения PWM 1. 2. Запись нового значения в регистр совпадения PWM2. 3. Запись в PWMLER, производящая одновременную установку битов 1 и 2. Измененные значения вступят в силу при следующем сбросе таймера (когда произойдет совпадение в канале PWM0). Порядок записи в регистры совпадения PWM при этом не важен, поскольку новые значения не будут использоваться до окончания записи в регистр
16.4. Описание регистров PWM 311 PWMLER. Такая схема изменения параметров обеспечивает одновременность активации обоих новых значений. Значение, задающее положение отдельного перепада, может быть изменено вышеуказанным способом. Битовая структура регистра PWMLER приведена в Табл. 16.8. Таблица 16.8. Биты регистра разрешения «защелкивания» PWM (PWMLER — 0хЕ0014050) Биты регистра PWMLER Функция бита Описание Значение после сброса 0 Разрешение «защелкивания» в канале 0 PWM Запись логической 1 в этот бит позволяет активировать последнее записанное в регистр совпадения PWM 0 зна- чение, когда таймер будет сброшен в следующий раз при совпадении PWM. (См. описание регистра управления совпадением PWM (PWMMCR)) 0 1 Разрешение «защелкивания» в канале 1 PWM Запись логической 1 в этот бит позволяет активировать последнее записанное в регистр совпадения PWM 1 зна- чение, когда таймер будет сброшен в следующий раз при совпадении PWM. (См. описание регистра управления совпадением PWM (PWMMCR)) 0 2 Разрешение «защелкивания» в канале 2 PWM Запись логической 1 в этот бит позволяет активировать последнее записанное в регистр совпадения PWM 2 зна- чение, когда таймер будет сброшен в следующий раз при совпадении PWM. (См. описание регистра управления совпадением PWM (PWMMCR)) 0 3 Разрешение «защелкивания» в канале 3 PWM Запись логической 1 в этот бит позволяет активировать последнее записанное в регистр совпадения PWM 3 зна- чение, когда таймер будет сброшен в следующий раз при совпадении PWM. (См. описание регистра управления совпадением PWM (PWMMCR)) 0 4 Разрешение «защелкивания» в канале 4 PWM Запись логической 1 в этот бит позволяет активировать последнее записанное в регистр совпадения PWM 4 зна- чение, когда таймер будет сброшен в следующий раз при совпадении PWM. (См. описание регистра управления совпадением PWM (PWMMCR)) 0 5 Разрешение «защелкивания» в канале 5 PWM Запись логической 1 в этот бит позволяет активировать последнее записанное в регистр совпадения PWM 5 зна- чение, когда таймер будет сброшен в следующий раз при совпадении PWM. (См. описание регистра управления совпадением PWM (PWMMCR)) 0 6 Разрешение «защелкивания» в канале 6 PWM Запись логической 1 в этот бит позволяет активировать последнее записанное в регистр совпадения PWM 6 зна- чение, когда таймер будет сброшен в следующий раз при совпадении PWM. (См. описание регистра управления совпадением PWM (PWMMCR)) 0 7 Зарезервирован Пользовательское программное обеспечение не должно производить запись в зарезервированные биты. Чтение зарезервированного бита возвращает неопределенное значение NA
ГЛАВА 17 АНАЛОГО-ЦИФРОВОЙ ПРЕОБРАЗОВАТЕЛЬ (ADC) Модуль АЦП микроконтроллеров семейства LPC2000 обладает следующи- ми основными характеристиками: • 10-битный АЦП последовательного приближения; • мультиплексирование входа АЦП на 4 или на 8 выводов; • режим Power down; • диапазон входного измеряемого напряжения 0...3 В; • время одного 10-битного преобразования не более 2.44 мкс; • режим преобразования Burst для одного или нескольких входов; • возможность производить преобразование при изменении внешнего сиг- нала на цифровом входе или по сигналу совпадения таймера. Основная синхронизация модуля АЦП обеспечивается синхросигналом VPB. Для преобразования частоты этого сигнала в частоту 4.5 МГц (максималь- ное значение), необходимую для осуществления процесса аналого-цифрового преобразования с последовательным приближением, служит программируемый делитель. Аналого-цифровое преобразование входного напряжения с полной точностью (разрешением) требует 11 периодов частоты 4.5 МГц. В микроконтроллерах LPC2134/36/38/44/46/48, помимо модуля ADC0, имеется модуль ADC1 со сходной архитектурой. 17.1. Описание выводов ADC Описание выводов, связанных с модулем АЦП для микроконтроллеров LPC2131/32/34/36/38/41/42/44/46/48, приведено в Табл. 17.1. У некоторых из этих микроконтроллеров имеется не один, а два модуля АЦП (ADC0 и ADC1). Таблица 17.1. Описание выводов, связанных с модулем АЦП микроконтроллеров LPC2131/32/34/36/38/41/42/44/46/48 Название вывода Тйп Описание AD0.7:0 (AD0.7:6, AD0.4:l для LPC2144/46/48) AD 1.7:0 (только у LPC2134/36/38/44/ 46/48) Вход Аналоговые входы. Модуль АЦП может измерить напряжение на любом из этих входов. Обратите внимание, что эти анало- говые входы всегда сопряжены с соответствующими вывода- ми, даже если эти выводы сконфигурированы как выводы порта. В последнем случае, может быть произведен простой внутренний тест АЦП. Примечание. Если в приложении используется АЦП, то уров- ни внешних сигналов на аналоговых'входах никогда не долж- ны превышать уровень напряжения V3A. В противном случае результат АЦП будет не соответствовать действительности. Если АЦП не используется в приложении, выводы, сопря- женные с входами АЦП, могут использоваться, как цифро- вые выводы Юс допустимым внешним напряжением 5 В.
17.1. Описание выводов ADC 313 Таблица 17.1. Описание выводов, связанных с модулем АЦП микроконтроллеров LPC2131/32/34/36/38/41/42/44/46/48 (продолжение) Название вывода Тйп Описание Vref Линия (вход) опорного на- пряжения Опорное напряжение. Этот вывод используется для подачи внешнего опорного напряжения АЦП Vdda> Vssa Линии питания Аналоговое напряжение питания и аналоговая земля. На этих выводах номинально должны присутствовать такие же напряжения, как и на выводах V3 и VSSD соответственно, однако VDDA, VSSA и V3, VSSD должны быть взаимно изолированы, чтобы минимизировать шумы и ошибки АЦП Описание выводов, связанных с модулем АЦП для микроконтроллеров LPC2101/02/03/14/24/19/29/94 и LPC2212/14/92/94, приведено в Табл. 17.2. Для остальных микроконтроллеров LPC2000, компания NXP на момент на- писания этой книги не предоставила описания модулей АЦП. Таблица 17.2. Описание выводов, связанных с модулем АЦП для микроконтроллеров LPC2101/02/03/14/24/19/29/94 и LPC2212/14/92/94 Название вывода Тйп Описание AIN7:0 Вход Аналоговые входы. Модуль АЦП может измерить напряже- ние на любом из этих 8 входов, но исполнение в корпусе с 64 выводами ограничивает количество входов до 4 (AIN3:0). Обратите внимание, что эти аналоговые входы всегда физи- чески связаны с соответствующими выводами, даже если эти выводы сконфигурированы как выводы порта. В пос- леднем случае, может быть произведен простой внутрен- ний тест АЦП. Примечание. Если в приложении используется АЦП, то уровни внешних сигналов на аналоговых входах никогда не должны превышать уровень напряжения V3A. В противном случае, результат АЦП не будет соответствовать действи- тельности. Если АЦП не используется в приложении, то выводы, сопряженные с входами АЦП, могут быть сконфи- гурированы как цифровые выводы IO с допустимым вне- шним напряжением 5 В. Via Vcca V3A» VSSA Линии питания Аналоговое напряжение питания и аналоговая земля. На этих выводах номинально должны присутствовать такие же напряжения, как и на выводах V3 и VSSD соответствен- но, однако VDDA, VSSA и V3, VSSD должны быть взаимно изолированы, чтобы минимизировать шумы и ошибки АЦП Примечание. Для микроконтроллеров LPC2101/02/03, в качестве опорного напряжения АЦП используется напряжение VDD (V3). Для микроконтроллеров LPC2114/24/19/29/94 и LPC2212/14/92/94, в качестве опорного напряжения АЦП используется напря- жение VDDA (V3A).
314 Глава 17. Аналого-цифровой преобразователь (ADC) 17.2. Описание регистров ADC Модуль АЦП устройств LPC2114/24/19/29/94 и LPC2212/14/92/94 включает 2 специальных регистра, описание которых приведено в Тдбл. 17.3. Таблица 17.3. Карта регистров модуля АЦП микроконтроллеров LPC2114/24/19/29/94 и LPC2212/14/92/94 Название Описание Доступ Значение после сброса Адрес ADCR Регистр управления модулем АЦП. Прежде чем будет производиться преобразование, в регистр ADCR должно быть записано соответствующее выбранному операционному режиму значение R/W 0x0000 0001 ОхЕООЗ 4000 ADDR Регистр данных модуля АЦП. Этот регистр содер- жит бит DONE завершения преобразования (когда преобразование завершено, DONE = 1) и 10-бит- ный результат преобразования R/W NA ОхЕООЗ 4004 Модули АЦП микроконтроллеров LPC2131/32/34/36/38 включают в себя 3 специальных регистра, описанных в Табл. 17.4. В остальных микроконтролле- рах LPC2000, имеющих АЦП, есть дополнительные сопряженные с АЦП спе- циальные регистры, которые в рамках данной книги не рассматриваются. Таблица 17.4. Карта регистров модулей АЦП микроконтроллеров LPC2131/32/34/36/38 Название Описание Доступ Значение после сброса Адрес и название AD0 AD1 ADCR Регистр управления модулем АЦП. Прежде чем будет про- изводиться преобразование, в регистр ADCR должно быть записано соответствующее выбранному операционному режиму значение R/W 0x0000 0001 ОхЕООЗ 4000 AD0CR ОхЕООб 0000 AD1CR ADDR Регистр данных модуля АЦП. Этот регистр содержит бит DONE завершения преобра- зования (когда преобразова- ние завершено, DONE = 1) и 10-битный результат преоб- разования R/W NA ОхЕООЗ 4004 AD0DR ОхЕООб 0004 AD1DR ADGSR По адресу расположения „. этого регистра (находяще- муся в адресном интервале AD0) может быть произве- дена запись, чтобы запус- тить преобразование в обо- их модулях АЦП одновременно WO 0x00 ОхЕООЗ 4008 ADGSR
17.2. Описание регистров ADC 315 Регистр управления АЦП (ADCR или ADOCR — 0хЕ0034000, AD1CR — ОхЕООбОООО) Битовая структура регистра ADCR приведена в Табл. 17.5. Таблица 17.5. Биты регистра управления АЦП (ADCR или AD0CR — 0хЕ0034000, AD1CR- ОхЕООбОООО) Номер бита ADCR Название бита Функция бита Значение после сброса 7:0 SEL Эти биты задают, какой из входов AD0.3:0, или AD0.7:0 (при наличии последних), или AD 1.7:0 (при наличии последних) будет выбран для подключения к входу модуля АЦП. (В микроконтроллерах LPC2114/24/29/94/19 и LPC2212/14/92/94 в 64-выводном корпусе за- действуются только биты AD0.3:0.) В программно-управляемом режи- ме, должен быть установлентолько один из этих битов (соответствую- щий выбранному входу). Для AD0 установленный бит 0 выбирает вход AD0.0, а установленный бит 7 выбирает вход AD7.0. В аппаратном ре- жиме сканирования может использоваться любое значение в пределах 1...8 (1...4). При этом нулевое значение эквивалентно значению 0x01 0x01 15:8 CLKDIV Чтобы сформировать тактовую частоту для модуля АЦП, которая должна быть меньше или равна 4.5 МГц, частота VPB (PCLK) де- лится на увеличенное на единицу значение совокупности (байта) этих битов. Как правило, пользовательская программа должна зада- вать наименьшее значение этого байта, которое соответствует час- тоте 4.5 МГц или немного меньшей, однако в некоторых случаях (например, для источника внешнего аналогового сигнала с высо- ким импедансом) желательно иметь более медленное тактирование 0 16 BURST Если этот бит сброшен, то аналого-цифровые преобразования управля- ются программно и занимают по 11 тактовых циклов. Если этот бит ус- тановлен, то модуль АЦП производит периодические преобразования с разрешением, заданным битами CLKS, для входов, выбранных соот- ветствующими единичными битами SEL (преобразования в режиме Burst). Первое после старта преобразование всегда соответствует уста- новленному младшему биту SEL, даже если ранее использовались вхо- ды АЦП, соответствующие другим битам SEL. Повторные преобразова- ния, соответствующие младшему биту, могут быть закончены путем сброса этого бита, однако текущее преобразование будет корректно за- вершено, даже если младший бит SEL сбрасывается до его окончания 0 19:17 CLKS Эти биты выбирают количество тактовых циклов, используемых для каждого преобразования в режиме Burst, и точность преобразования в битах для результата, возвращаемого в регистре ADDR. Эти величины лежат в диапазоне от 11 тактовых циклов (10 битов) до 4 тактовых цик- лов (3 бита): 000 = 11 тактовых циклов/10 битов, 001 = 10 тактовых цик- лов/9 битов,..., 111=4 тактовых цикла/3 бита 000 21 PDN 1: Модуль АЦП находится в операционном (активном) режиме. 0: Модуль АЦП находится в режиме Power down 0 23:22 TEST1.0 Эти биты используются при тестировании АЦП микроконтроллера. 00 = нормальные операции, 01 = тестовый цифровой режим, 10 = тесто- вый режим ЦАП, и 11 = режим тестирования простого преобразования 0 26:24 START Когда бит BURST = 0, эти биты управляют стартом преобразования: 000: не начинать преобразование (это значение должно использоваться при сбросе бита PDN); 001: запустить преобразование немедленно; 010: запустить преобразование, когда перепад сигнала, выбранный би- том 27 (EDGE), приходит на вывод P0.16/EINT0/MAT0.2/CAP0.2; 011: запустить преобразование, когда перепад сигнала, выбранный би- том 27, приходит на вывод P0.22/TD3/CAP0.0/MAT0.0; Примечание. Для значений 100... 111 сигнал МАТ не должен быть свя- зан с выводом, сконфигурированным как выход: 100: запустить преобразование, когда перепад сигнала, выбранный битом 27, приходит на вывод МАТ0.1; 101: запустить преобразование, когда перепад сигнала, выбранный битом 27, приходит на вывод МАТ0.3; 110: запустить преобразование, когда перепад сигнала, выбранный битом 27, приходит на вывод МАТ 1.0; 111: запустить преобразование, когда перепад сигнала, выбранный битом 27, приходит на вывод МАТ 1.1. 000
316 Глава 17. Аналого-цифровой преобразователь (ADC) Таблица 17.5, Биты регистра управления АЦП (ADCR или ADOCR — 0хЕ0034000, AD1CR — ОхЕООбОООО) (продолжение) Номер бита ADCR Название бита Функция бита Значение после сброса 27 EDGE Значение этого бита имеет значение только, когда поле START содер- жит значения 010... 111. Для этих случаев: 0: запустить преобразование по спаду выбранного сигнала САР/МАТ; 1: запустить преобразование по фронту выбранного сигнала САР/МАТ 0 31:28 Зарезер- вирова- ны Пользовательское программное обеспечение не должно производить запись в зарезервированные биты. Чтение зарезервированного бита возвращает неопределенное значение 0 Регистр данных АЦП (ADDR илиАИООР - 0хЕ0034004, AD1DR - 0хЕ0060004) Битовая структура регистра ADDR приведена в Табл. 17.6. Таблица 17,6, Биты регистра данных АЦП (ADDR или AD0DR — 0хЕ0034004, AD1DR—ОхЕООб0004) Номер бита ADDR Название бита Функция бита Значение после сброса 31 DONE Этот бит устанавливается, когда преобразование завершается, а сбрасывается, когда регистр данных читается и когда в регистр ADCR производится запись. Если регистр ADCR записывается во время преобразования, то бит DONE устанавливается и начинает- ся новое преобразование 0 30 OVERUN Этот бит устанавливается в режиме Burst, если результаты одного или более преобразований были потеряны и поверх них были за- писаны результаты следующего преобразования. В случае наступ- ления указанной ситуации, названной производителем операцией «не-FIFO», этот бит сбрасывается путем чтения регистра ADDR 0 29:27 Зарезерви- рованы Эти биты всегда читаются как нули. В перспективных устройствах они могут использоваться для расширения поля CHN с тем, чтобы обслуживать большее количество каналов АЦП 0 26:24 CHN Эти биты содержат младшие биты номера канала, для которого было произведено преобразование X 23:16 Зарезерви- рованы Эти биты всегда читаются как нули 0 15:6 V/V3A Когда бит DONE = 1, это поле содержит двоичное значение, соот- ветствующее внешнему напряжению на выводе AIN, выбранном полем SEL регистра ADCR, поделенному на напряжение на выво- де Vdda- Нулевое значение поля указывает на то, что напряжение на выводе AIN меньше, равно или приблизительно равно напря- жению VSSA, а значение 0x3FF указывает, что напряжение на выво- де AIN приблизительно равно, равно или больше, чем напряжение Vdda(Vsa)- При тестировании данные, записанные в это поле, фиксируются в сдвиговом регистре, который тактируется тактовым сигналом мо- дуля АЦП. Старший бит этого регистра является источником сиг- нала для входа DINSERI модуля АЦП. Такая схема используется только при TEST[ 1:0] = 10 X 5:0 Зарезерви- рованы Эти биты всегда читаются как нули. Они обеспечивают совмести- мость с будущими АЦП с более высокой разрешающей способнос- тью 0
17.3. Операции модуля ADC 317 Регистр глобального старта АЦП (ADGSR — 0хЕ0034008) Битовая структура регистра ADGSR приведена в Табл. 17.7. Таблица 17,7. Биты регистра глобального старта АЦП (ADGSR — 0хЕ0034008) Номер бита ADGSR Название бита Функция бита Значение после сброса 15:0 Зарезер- вирова- ны Пользовательское программное обеспечение не должно производить запись в зарезервированные биты. Чтение зарезервированного бита возвращает неопределенное значение 0 16 BURST Если этот бит сброшен, то аналого-цифровые преобразования управ- ляются программно и занимают по 11 тактовых циклов. Если этот бит установлен, то модуль АЦП производит периодические преобра- зования с точностью, заданной битами CLKS, для входов, выбран- ных соответствующими единичными битами SEL (преобразования в режиме Burst). Первое после старта преобразование всегда соответс- твует установленному младшему биту SEL, даже если ранее исполь- зовались входы АЦП, соответствующие другим битам SEL. Повтор- ные преобразования, соответствующие младшему биту, могут быть закончены путем сброса этого бита, однако текущее преобразование будет корректно завершено, даже если младший бит SEL сбрасывает- ся до его окончания 0 23:17 Зарезер- вирова- ны Пользовательское программное обеспечение не должно производить запись в зарезервированные биты. Чтение зарезервированного бита возвращает неопределенное значение 0 26:24 START Когда бит BURST = 0, эти биты управляют стартом преобразования: ООО: не начинать преобразование (это значение должно использо- ваться при сбросе бита PDN); 001: запустить преобразование немедленно; 010: запустить преобразование, когда перепад сигнала, выбранный битом 27 (EDGE), приходит на вывод P0.16/EINT0/MAT0.2/CAP0.2; ОН: запустить преобразование, когда перепад сигнала, выбранный битом 27, приходит на вывод P0.22/TD3/CAP0.0/MAT0.0; Примечание. Для значений 100... 111 сигнал МАТ не должен быть свя- зан с выводом, сконфигурированным как выход: 100: запустить преобразование, когда перепад сигнала, выбранный битом 27, приходит на вывод MATO. 1; 101: запустить преобразование, когда перепад сигнала, выбранный битом 27, приходит на вывод МАТ0.3; 110: запустить преобразование, когда перепад сигнала, выбранный битом 27, приходит на вывод МАТ1.0; 111: запустить преобразование, когда перепад сигнала, выбранный битом 27, приходит на вывод МАТ 1.1. 000 27 EDGE Значение этого бита имеет смысл только, когда поле START содер- жит значения 010...111. Для этих случаев: 0: запустить преобразование по спаду выбранного сигнала САР/МАТ; 1: запустить преобразование по фронту выбранного сигнала САР/МАТ 0 31:28 Зарезер- вирова- ны Пользовательское программное обеспечение не должно производить запись в зарезервированные биты. Чтение зарезервированного бита возвращает неопределенное значение 0 17.3. Операции модуля ADC 17.3.1. Преобразование, вызываемое аппаратно Если бит BURST в регистре ADCR сброшен и поле START содержит значе- ния 010... 111, то модуль АЦП запустит преобразование при появлении перепада на выбранном выводе или по сигналу совпадения таймера. Возможности выбо-
318 Глава 17. Аналого-цифровой преобразователь (ADC) ра условий запуска преобразования включают в себя выбор заданного перепада любого из четырех сигналов совпадения или преобразование при заданном пе- репаде любого из двух выводов захвата/совпадения. Аппаратная логика обнару- жения перепада использует логическую функцию XOR (Исключающее ИЛИ) для выбранного сигнала и бита 27 (EDGE) регистра ADCR. 17.3.2. Генерация тактового сигнала Весьма желательно, чтобы делитель тактовой частоты модуля АЦП (4.5 МГц) после сброса микроконтроллера был бы в неактивном состоянии (бит PDN регистра ADCR сброшен), чтобы выборки могли начаться немедленно, когда в поле START регистра ADCR записывается значение 001 или на задан- ный вывод поступает заданный перепад. Это также экономит потребляемую энергию, особенно если модуль АЦП используется нечасто. 17.3.3. Прерывания Запрос прерывания формируется контроллером векторов прерываний (VIC), когда устанавливается бит DONE в регистре ADDR. Программно можно использовать разрешение прерывания от АЦП и задавать, последует ли за уста- новкой бита DONE обработка прерывания. Бит DONE будет автоматически сброшен при чтении регистра ADDR. 17.3.4. Влияние на точность АЦП цифровых цепей Модуль АЦП может использоваться, чтобы измерять напряжение на любом выводе ANI вне зависимости от того, как этот вывод сконфигурирован в регис- тре выбора выводов (см. главу 8 «Блок коммутации выводов»). В случае выбора для вывода функции AIN (AD) улучшается точность преобразования внешнего сигнала на этом выводе, поскольку внутри микроконтроллера от него отключа- ются цифровые цепи.
ГЛАВА 1 8 МОДУЛЬ ЧАСОВ-КАЛЕНДАРЯ РЕАЛЬНОГО ВРЕМЕНИ (RTC) Модуль часов-календаря реального времени (RTC) микроконтроллеров се- мейства LPC2000 имеет следующие функциональные особенности: • производит отсчет времени, обеспечивая этим работу календаря и часов; • имеет крайне малую потребляемую мощность, обеспечивая возможность питания от встроенной батареи, включенной в состав системы; • обеспечивает счет секунд, минуты, часов, дней месяца, месяцев, лет, дней недели и дней года; • программируемый делитель тактовой частоты позволяет настраивать мо- дуль RTC под различные частоты внешнего кварцевого резонатора. Модуль RTC предназначен для обеспечения функционирования счетчиков, отсчитывающих время при включенном и отключенном питании микроконт- роллера. Модуль RTC потребляет очень небольшую мощность, что позволяет питать его от встроенной батареи, в то время как центральный процессор нахо- дится в режиме Idle mode. В микроконтроллерах LPC2101/02/03/31/32/34/36/38/41/42/44/46/48 имеют- ся выводы подключения к модулю RTC отдельного внешнего кварцевого резона- тора на частоту 32768 Гц (RTCX1, RTCX2) и отдельный вход напряжения питания модуля RTC (VBat). Соответственно, пользователь может выбрать способ такти- рования модуля RTC: от собственного генератора с внешним резонатором или от предварительного делителя RTC, использующего тактовую частоту VPB. 18.1. Архитектура модуля RTC Блок-схема модуля RTC приведена на Рис. 18.1. Рис. 18.1. Блок-схема модуля RTC
320 Глава 18. Модуль часов-календаря реального времени (RTC) 18.2. Описание регистров RTC Модуль RTC включает в себя определенную совокупность регистров. Ад- ресное пространство модуля RTC, в соответствии с функциональным назначе- нием, разбито на четыре секции. Первые восемь адресов входят в смешанную группу регистров. Второй набор из восьми адресов составляет группу счетчи- ков времени. Третий набор из восьми адресов составляет группу сигнальных регистров. Остальные регистры управляют делителем опорной частоты (пред- делителем) RTC. Модуль часов реального времени включает в себя регистры, перечисленные в Табл. 18.1. Детальные описания этих регистров приведены ниже. Таблица 18,1, Карта регистров модуля часов-календаря реального времени (RTC) Название Размер [бит] Описание Доступ Значение после сброса1* Адрес (в шес- тнадцатирич- ном виде) Смешанная группа регистров ILR 2 Регистр местоположения прерывания R/W 0хЕ0024000 СТС 15 Счетчик импульсов тактовой частоты RO 0хЕ0024004 CCR 4 Регистр управления тактированием R/W 0хЕ0024008 CIIR 8 Регистр прерываний от инкрементиро- вания счетчиков R/W 0хЕ002400С AMR 8 Регистр сигнальной маски R/W 0хЕ0024010 CTIME0 (32) Регистр консолидированного времени 0 RO 0хЕ0024014 CTIME1 (32) Регистр консолидированного времени 1 RO 0хЕ0024018 CTIME2 (32) Регистр консолидированного времени 2 RO 0хЕ002401С Группа счетчиков времени SEC 6 Регистр секунд R/W 0хЕ0024020 MIN 6 Регистр минут R/W 0хЕ0024024 HOUR 5 Регистр часов R/W 0хЕ0024028 DOM 5 Регистр дней-месяца R/W 0хЕ002402С DOW 3 Регистр дней недели R/W 0хЕ0024030 DOY 9 Регистр дней года R/W 0хЕ0024034 MONTH 4 Регистр месяцев R/W 0хЕ0024038 YEAR 12 Регистр лет R/W 0хЕ002403С
18.2. Описание регистров RTC 321 Таблица 18,1, Карта регистров модуля часов-календаря реального времени (RTC) (продолжение) Название Размер [бит] Описание Доступ Значение после сброса1* Адрес (в шес- тнадцатирич- ном виде) Группа сигнальных регистров ALSEC 6 Сигнальное значение секунд R/W 0хЕ0024060 ALMIN 6 Сигнальное значение минут R/W 0хЕ0024064 ALHOUR 5 Сигнальное значение часов R/W 0хЕ0024068 ALDOM 5 Сигнальное значение дней месяца R/W 0хЕ002406С ALDOW 3 Сигнальное значение дней недели R/W 0хЕ0024070 ALDOY 9 Сигнальное значение дней года R/W 0хЕ0024074 ALMON 4 Сигнальное значение месяцев R/W 0хЕ0024078 ALYEAR 12 Сигнальное значение лет R/W 0хЕ002407С Регистры управления предцелителем PREINT 13 Значение предделителя (целая часть) R/W 0 0хЕ0024080 PREFRAC 13 Значение предделителя (дробная часть) R/W 0 0хЕ0024084 Сброс микроконтроллера не затрагивает содержимого регистров модуля RTC, кроме ре- гистров, входящих в состав предделителя. Регистры RTC должны быть инициализированы поль- зовательской программой, если модуль RTC используется в приложении. 18.2.1. Прерывания от модуля RTC Управление генерацией прерываний от RTC осуществляется через регистр местоположения прерывания (ILR), регистр прерываний при инкрементирова- нии счетчиков (CIIR), сигнальные регистры и регистр сигнальной маски (AMR). Прерывания генерируются только для перехода в состояние обработки прерывания (не для сброса). Регистр ILR раздельно разрешает прерывания от AMR и CIIR. Каждый бит в регистре CIIR соответствует одному из счетчиков времени. Если в ре- гистре CIIR разрешена специальная функция соответствующего счетчика вре- мени, to каждый раз, когда инкрементируется этот счетчик, генерируется пре- рывание. Сигнальные регистры предоставляют пользователю возможность задавать дату и время, при наступлении которых будет сгенерировано прерывание. На- личие регистра AMR обеспечивает механизм маскирования сигнализации при совпадении. Если все сигнальные регистры являются незамаскированными, то при совпадении их значений со значениями соответствующих счетчиков време- ни будет сгенерировано прерывание. 304
322 Глава 18. Модуль часов-календаря реального времени (RTC) 18.2.2. Смешанная группа регистров Регистры смешанной группы модуля RTC перечислены в Табл. 18.2. Более детальные описания каждого из регистров даны ниже. Таблица 18.2. Смешанная группа регистров модуля RTC Адрес Название Размер [бит] Описание Доступ 0хЕ0024000 ILR 2 Местоположение прерывания. Чтение этого ре- гистра указывает источник прерывания. Запись логической 1 в соответствующий бит в регистре сбрасывает соответствующее прерывание R/W 0хЕ0024004 СТС 15 Счетчик импульсов тактовой частоты. Подсчи- тывает значение импульсов тактовой частоты (опорной частоты, деленной на значение предде- лителя) RO 0хЕ0024008 CCR . 4 Регистр управления тактированием. Управляет делителем тактовой частоты R/W 0хЕ002400С CIIR 8 Регистр прерываний при инкрементировании счетчиков. Выбирает счетчики, которые генери- руют прерывание, когда происходит их инкре- ментирование R/W 0хЕ0024010 AMR 8 Регистр сигнальной маски. Управляет маскиро- ванием каждого из сигнальных регистров R/W 0хЕ0024014 CTIME0 32 Регистр консолидированного (объединенного) времени 0 RO 0хЕ0024018 CTIME1 32 Регистр консолидированного (объединенного) времени 1 RO 0хЕ002401С CTIME2 32 Регистр консолидированного (объединенного) времени 2 RO Регистр местоположения прерывания (ILR — 0хЕ0024000) Регистр местоположения прерывания — 2-битный регистр, который опре- деляет, какой блок сгенерировал прерывание (см. Табл. 18.3). Запись логичес- кой единицы в бит регистра сбрасывает соответствующее этому биту прерыва- ние. Запись логического нуля не будет иметь никакого эффекта. Это позволяет пользовательской программе считывать этот регистр и вновь записывать в него прочитанное значение, чтобы сбросить только то прерывание, которое было обнаружено при чтении. Битовая структура регистра ILR приведена в Табл. 18.3. Таблица 18.3. Биты регистра местоположения прерывания (ILR — 0хЕ0024000) Номер бита ILR Название бита Описание 0 RTCCIF Если этот бит установлен, значит, блок прерываний от инкрементирования счетчиков сгенерировал прерывание. Запись логической 1 в этот бит сбрасы- вает прерывание, сгенерированное от инкрементирования счетчика 1 RTCALF Если этот бит установлен, значит, сигнальные регистры сгенерировали пре- рывание. Запись логической 1 в этот бит сбрасывает сигнальное прерывание
18.2. Описание регистров RTC 323 Счетчик импульсов тактовой частоты (СТС — 0хЕ0024004) Счетчик импульсов тактовой частоты доступен только для чтения. Он мо- жет быть обнулен через регистр управления тактированием (CCR). Регистр СТС состоит из битов счетчика делителя тактовой частоты. Битовая структура регистра СТС приведена в Табл. 18.4. Таблица 18,4. Биты счетчика импульсов тактовой частоты (СТС — 0хЕ0024004) Номер бита СТС Название бита Описание 0 Зарезервирован Пользовательское программное обеспечение не должно производить запись в зарезервированные биты. Чтение зарезервированного бита возвращает неопределенное значение 15:1 Счетчик такто- вой частоты До подачи импульса на счетчик секунд СТС отсчитывает 32768 им- пульсов за секунду. Вследствие наличия предделителя RTC, эти 32768 приращений могут иметь неодинаковую по времени длительность. Подробнее об этом см. в описании делителя опорной частоты (предде- лителя) RTC Регистр управления тактированием (CCR — 0хЕ0024008) Это 4-битный регистр, который управляет операциями схемы деления так- товой частоты. Битовая структура регистра CCR приведена в Табл. 18.5. Таблица 18.5. Биты регистра управления тактированием (CCR — 0хЕ0024008) Номер бита CCR Название бита Описание 0 CLKEN Разрешение тактирования. Когда этот бит установлен, разрешена работа счетчиков времени. Когда бит сброшен, они заблокированы таким образом, чтобы их можно было программно инициализировать 1 CTCRST Сброс СТС. Когда этот бит установлен, все компоненты счетчика СТС сбро- шены. Компоненты остаются в таком состоянии до тех пор, пока бит CCR[ 1] не будет сброшен 3:2 CTTEST Разрешение тестирования. В нормальном режиме функционирования моду- ля RTC, эти биты всегда должны быть сброшены 4'> CLKSRC Если этот бит сброшен, то счетчик импульсов тактовой частоты получает тактовые импульсы от предделителя RTC. (Этот вариант тактирования явля- ется единственным в более ранних микроконтроллерах LPC2000.) Если этот бит установлен, то счетчик импульсов тактовой частоты получает тактовые импульсы с частотой 32768 Гц от генератора, связанного с вывода- ми RTCX1, RTCX2 ° Этот бит является значащим только в микроконтроллерах LPC2101/02/03/31/32/34/36/38/ 41/42/44/46/48. В остальных микроконтроллерах LPC2000 этот бит является зарезервированным. 18.2.3. Прерывание от инкрементирования счетчиков Регистр прерывания от инкрементирования счетчиков (CIIR — 0хЕ002400С) Этот регистр позволяет генерировать прерывание каждый раз, когда какой- либо счетчик времени модуля RTC инкрементируется. Это прерывание остает- ся активным, пока не будет сброшено путем записи логической единицы в со- ответствующий бит регистра местоположения прерывания ILR[0]. Битовая структура регистра CIIR приведена в Табл. 18.6.
324 Глава 18. Модуль часов-календаря реального времени (RTC) Таблица 18.6. Биты регистра прерывания от инкрементирования счетчиков (CIIR — 0хЕ002400С) Номер бита CIIR Название бита Описание 0 IMSEC Когда этот бит установлен, это значит, что сгенерировано прерывание от инкрементирования регистра секунд 1 IMMIN Когда этот бит установлен, это значит, что сгенерировано прерывание от инкрементирования регистра минут 2 IMHOUR Когда этот бит установлен, это значит, что сгенерировано прерывание от инкрементирования регистра часов 3 IMDOM Когда этот бит установлен, это значит, что сгенерировано прерывание от инкрементирования регистра дней месяца 4 IMDOW Когда этот бит установлен, это значит, что сгенерировано прерывание от инкрементирования регистра дней недели 5 IMDOY Когда этот бит установлен, это значит, что сгенерировано прерывание от инкрементирования регистра дней года 6 IMMON Когда этот бит установлен, это значит, что сгенерировано прерывание от инкрементирования регистра месяцев 7 IMYEAR Когда этот бит установлен, это значит, что сгенерировано прерывание от инкрементирования регистра лет 18.2.4. Сигнальная маска Регистр сигнальной маски (AMR — 0хЕ0024010) Этот регистр позволяет пользовательской программе маскировать любой из сигнальных регистров. В Табл. 18.7 приведено соответствие битов регистра AMR сигнальным регистрам. Для реализации сигнальной функции, каждому неза- маскированному сигнальному регистру соответствует счетчик времени, кото- рый генерирует прерывание. Прерывание будет сгенерировано только в том слу- чае, когда результат сравнения будет первоначально (единожды) изменяться от несовпадения к совпадению. Прерывание сбрасывается, когда в соответствую- щий бит регистра местоположения прерывания (ILR) записывается логическая единица. Если все биты маски установлены, то сигнал тревоги заблокирован. Таблица 18.7. Биты регистра сигнальной маски (AMR — OxЕО024010) Номер бита AMR Название бита Описание 0 AMRSEC Когда этот бит установлен, значение регистра секунд не использу- ется для сравнения при выработке сигнала тревоги 1 AMRMIN Когда этот бит установлен, значение регистра минут не использу- ется для сравнения при выработке сигнала тревоги 2 AMRHOUR Когда этот бит установлен, значение регистра часов не использу- емся для сравнения при выработке сигнала тревоги 3 AMRDOM когда_этот бит установлен, значение регистра дней месяца не ис- пользуется для сравнения при выработке сигнала тревоги 4 AMRDOW Когда этот бит установлен, значение регистра дней недели не ис- пользуется для сравнения при выработке сигнала тревоги 5 AMRDOY Когда этот бит установлен, значение регистра дней года не ис- пользуется для сравнения при выработке сигнала тревоги 6 AMRMON Когда этот бит установлен, значение регистра месяцев не исполь- зуется для сравнения при выработке сигнала тревоги 7 AMRYEAR Когда этот бит установлен, значение регистра лет не используется для сравнения при выработке сигнала тревоги
18.2. Описание регистров RTC 325 18.2.5. Регистры консолидированного времени Значения счетчиков времени могут произвольным образом читаться в объединенном (консолидированном) формате, который позволяет пользова- тельской программе производить чтение всех счетчиков времени с помощью лишь трех операций чтения. Регистры счетчиков упакованы в 32-битные зна- чения, как представлено в Табл. 18.8, Табл. 18.9 и Табл. 18.10. LSB (Least Significant Bit — младший значащий бит) каждого регистра счетчика читает- ся, как бит 0, 8, 16 или 24 регистра консолидированного времени. Регистры консолидированного времени доступны только для чтения. Чтобы записы- вать новые значения в счетчики времени, должны использоваться адреса са- мих этих счетчиков. Регистр консолидированного времени О (СТ1МЕ0 — 0хЕ0024014) Регистр консолидированного времени 0 содержит младшие значения вре- мени: секунды, минуты, часы и дни недели. Битовая структура регистра CTIME0 приведена в Табл. 18.8. Таблица 18.8. Биты регистра консолидированного времени 0 (CTIME0 — 0хЕ0024014) Номера битов CTIME0 Функция битов Описание 31:27 Зарезервированы Пользовательская программа не должна производить запись в зарезервированные биты. Чтение зарезервированного бита воз- вращает неопределенное значение 26:24 Дни недели Значение дней недели лежит в диапазоне 0...6 23:21 Зарезервированы Пользовательская программа не должна производить запись в зарезервированные биты. Чтение зарезервированного бита воз- вращает неопределенное значение 20:16 Часы Значение часов лежит в диапазоне 0...23 15:14 Зарезервированы Пользовательская программа не должна производить запись в зарезервированные биты. Чтение зарезервированного бита воз- вращает неопределенное значениее 13:8 Минуты Значение минут лежит в диапазоне 0...59 7:6 Зарезервированы Пользовательская программа не должна производить запись в зарезервированные биты. Чтение зарезервированного бита воз- вращает неопределенное значение 5:0 ; - Секунды Значение секунд лежит в диапазоне 0...59 Регистр консолидированного времени 1 (CTIME1 — 0хЕ0024018) Регистр консолидированного времени 1 содержит значения дней месяца, месяцев и лет. Битовая структура регистра CTIME1 приведена в Табл. 18.9.
326 Глава 18. Модуль часов-календаря реального времени (RTC) Таблица 18,9, Биты регистра консолидированного времени 1 (CTIME1 — 0хЕ0024018) Номера битов CTIME1 Функция битов Описание 31:28 Зарезерви- рованы Пользовательская программа не должна производить запись в заре- зервированные биты. Чтение зарезервированного бита возвращает неопределенное значение 27:16 Годы Значение лет лежит в диапазоне 0...4095 15:12 Зарезерви- рованы Пользовательская программа не должна производить запись в заре- зервированные биты. Чтение зарезервированного бита возвращает неопределенное значение 11:8 Месяцы Значение месяцев лежит в диапазоне 1...12 7:5 Зарезерви- рованы Пользовательская программа не должна производить запись в заре- зервированные биты. Чтение зарезервированного бита возвращает неопределенное значение 4:0 Дни месяца Значение дней месяца лежит в диапазоне 1...28, 29, 30 или 31 (в зави- симости от месяца и от того, високосный ли год) Регистр консолидированного времени 2 (CTIME2 — 0хЕ002401С) Регистр консолидированного времени 2 содержит только значения дней года. Битовая структура регистра CTIME2 приведена в Табл. 18.10. Таблица 18.10, Биты регистра консолидированного времени 2 (CTIME2 — 0хЕ002401С) Номера битов CTIME2 Функция битов Описание 11:0 Дни года Значение дней года лежит в диапазоне 1...365 (366 для високосных годов) 31:12 Зарезер- вированы Пользовательская программа не должна производить запись в зарезерви- рованные биты. Чтение зарезервированного бита возвращает неопреде- ленное значение 18.2.6. Группа счетчиков времени Группа счетчиков времени состоит из восьми счетчиков, перечисленных в Табл. 18.11 и Табл. 18.12. Чтение или запись в эти счетчики может осущест- вляться с использованием адресов, приведенных в Табл. 18.12. Таблица 18.11. Значения и взаимосвязь счетчиков времени модуля RTC Счетчик Размер Тактируется от Минимальное значение Максимальное значение Секунды 6 Clkl (см. Рис. 18.1) 0 59 Минуты 6 Секунд 0 59 Часы 5 Минут 0 23 Дни месяца 5 Часов 1 28,29, 30 или 31 Дни недели 3 Часов 0 6 Дни года 9 Часов 1 365 или 366 (для високосного года) Месяцы 4 Дней месяца 1 12 Годы 12 Месяцев или дней года 0 4095
18.2. Описание регистров RTC 327 Таблица 18.12. Группа регистров счетчиков времени модуля RTC Адрес Название Размер Описание Доступ 0хЕ0024020 SEC 6 Значение секунд лежит в диапазоне 0...59 R/W 0хЕ0024024 MIN 6 Значение минут лежит в диапазоне 0...59 R/W 0хЕ0024028 HOUR 5 Значение часов лежит в диапазоне 0...23 R/W 0хЕ002402С DOM 5 Значение дней месяца лежит в диапазо- не 1... 28, 29, 30 или 31 (в зависимости от месяца и от того, високосный ли год)1) R/W 0хЕ0024030 DOW 3 Значение дней недели лежит в диапазо- не 0...61) R/W 0хЕ0024034 DOY 9 Значение дней года лежит в диапазоне 1...365 (366 для високосных годов)1) R/W 0хЕ0024038 MONTH 4 Значение месяцев лежит в диапазоне 1...12 R/W 0хЕ002403С YEAR 12 Значение лет лежит в диапазоне 0...4095 R/W ° Эти значения просто инкрементируются в соответствующих интервалах и сбрасываются при достижении состояния переполнения. Они не рассчитываются и при инициализации модуля RTC должны быть установлены в соответствии с текущей датой. 18.2.7. Определение високосного года Для определения високосного года, в модуле RTC производится простое побитное сравнение с целью определить, являются ли два самых младших бита счетчика лет нулевыми. Если результат сравнения логически истинный (true), то модуль RTC рассматривает текущий год как високосный. Таким образом, модуль RTC считает все годы, значение которых делится на 4, високосными. Этот алгоритм корректен для всех значений лет от 1901 до 2099 годов, однако он неверен для 2100 года, который не является високосным. Единственное следс- твие факта определения високосного года модулем RTC заключается в том, что модуль должен изменить длительность месяца февраля для счетчиков месяца, дней месяца и лет. 18.2.8. Группа сигнальных регистров Сигнальные регистры перечислены в Табл. 18.13. Значения этих регистров сравниваются со значениями счетчиков времени. При совпадении значения любого из незамаскированных сигнальных регистров со значением соответс- твующего счетчика времени будет сгенерировано прерывание. Прерывание бу- дет сброшено при записи логической единицы в соответствующий бит регистра местоположения прерывания ILR[ 1].
328 Глава 18. Модуль часов-календаря реального времени (RTC) Таблица 18.13. Группа сигнальных регистров модуля RTC Адрес Название Размер Описание Доступ 0хЕ0024060 ALSEC 6 Сигнальное значение для секунд R/W 0хЕ0024064 ALMIN 6 Сигнальное значение для минут R/W 0хЕ0024068 ALHOUR 5 Сигнальное значение для часов R/W 0хЕ002406С ALDOM 5 Сигнальное значение для дней месяца R/W 0хЕ0024070 ALDOW 3 Сигнальное значение для дней недели R/W 0хЕ0024074 ALDOY 9 Сигнальное значение для дней года R/W 0хЕ0024078 ALMON 4 Сигнальное значение для месяцев R/W 0хЕ002407С ALYEAR 12 Сигнальное значение для лет R/W 18.3. Рекомендации по использованию модуля RTC Так как модуль RTC тактируется сигналом VPB (pclk), то любой перерыв в последовательности этих тактовых импульсов приведет к дрейфу отсчитывае- мого модулем RTC времени. Таким образом, в результате, текущие «показания» регистров модуля RTC могут отличаться от реального времени. В микроконтроллерах LPC2000 нет никаких встроенных средств, чтобы со- хранить текущее состояние RTC в момент отключения напряжения питания или обеспечивать отсчет времени в случае перерыва в работе или изменения ис- точника тактовой частоты. Отключение питания устройства приведет к потере содержимого всех регистров модуля RTC. Переход в режим Power Down вызовет паузу в счете времени. Изменение базовой (опорной) частоты модуля RTC во время системных операций (реконфигурации ФАПЧ, таймера VPB или предде- лителя модуля RTC) приведет к возникновению накопленной ошибки счета времени. 18.4. Делитель опорной частоты (предделитель) RTC Делитель опорной частоты (предделитель) RTC позволяет получить частоту 32.768 кГц из любой периферийной тактовой частоты, большей или равной 65.536 кГц (2 х 32.768 кГц). Это дает возможность модулю RTC всегда работать в надлежащем темпе вне зависимости от периферийной тактовой частоты. В ос- новном, предделитель делит периферийную тактовую частоту (pclk) на значе- ние, которое состоит из целой части и дробной части. Результатом деления яв- ляется не непрерывная последовательность импульсов с постоянной частотой, а последовательность с переменной частотой, у которой в периоде количество периодов pclk непостоянно. Однако полное количество импульсов результиру- ющей частоты за секунду всегда будет равно 32768. Делитель опорной частоты состоит из 13-битного счетчика целой части и 15-битного счетчика дробной части. Разрядность этих счетчиков выбиралась производителем, исходя из следующих соображений: 1. Разрядность счетчика целой части предделителя должна обеспечивать под- счет частот, которые поддерживаются микроконтроллерами семейства LPC2000. При делении, например, частоты 160 МГц на 32768 и вычитании
18.4. Делитель опорной частоты (предделителъ) RTC 329 из результата 1 получаем значение целой части, равное 4881, и остаток, рав- ный 26624 (см. описание регистров PREINT и PREFRAC ниже). Чтобы под- считать значение 4881, необходимы 13 битов, однако фактически 13-битный счетчик позволяет поддерживать частоты до 268.4 МГц (32.768 кГц х 8192). 2. Значение остатка может достигать 32767, а для подсчета такого числа требу- ется не менее чем 15 битов. Регистры целой и дробног части предделителя приведены в Табл. 18.14. Таблица 18.14. Регистры делителя опорной частоты (предделителя) RTC Адрес Название Размер Описание Доступ 0хЕ0024080 PREINT 13 Значение предделителя (целая часть) R/W 0хЕ0024084 PREFRAC 15 Значение предделителя (дробная часть) R/W Регистр целой части предделителя (PREINT — 0хЕ0024080) Этот регистр содержит целую часть значения предделителя, рассчитывае- мую как: PREINT = int (pclk / 32768) - 1. Значение PREINT должно быть боль- ше или равно 1. Битовая структура регистра PREINT приведена в Табл. 18.15. Таблица 18.15. Регистр целой части предделителя (PREINT — 0хЕ0024080) Номер бита PREINT Функция бита Описание Значение после сброса 15:13 Зарезер- вированы Пользовательское программное обеспечение не должно про- изводить запись в зарезервированные биты. Чтение зарезер- вированного бита возвращает неопределенное значение NA 12:0 Целая часть преддели- теля Содержит целую часть значения предделителя модуля RTC 0 Регистр дробной части предделителя (PREFRAC — 0хЕ0024084) Этот регистр содержит дробную часть значения предделителя, рассчитывае- мую как: PREFRAC = pclk - ((PREINT + 1) х 32768). Битовая структура регистра PREFRAC приведена в Табл. 18.16. Таблица 18.16. Регистр дробной части предделителя (PREFRAC — 0хЕ0024084) Номер бита PREFRAC Функция бита Описание Значение после сброса 15 Зарезер- вирован Пользовательское программное обеспечение не должно про- изводить запись в зарезервированные биты. Чтение зарезер- вированного бита возвращает неопределенное значение NA 14:0 Дробная часть предде- лителя Содержит дробную часть значения предделителя модуля RTC 0
330 Глава 18. Модуль часов-календаря реального времени (RTC) 18.4.1. Примеры использования предделителя Рассмотрим упрощенный случай, когда частота pclk равна 65.537 кГц. Тогда: PREINT = int х (pclk/32768) - 1 = 1; PREFRAC = pclk - ((PREINT + 1) x 32768) = 1. С этими установками предделителя в модуле RTC будет производиться под- счет ровно 32768 импульсов в секунду, а на выходе предделителя в секунду будут 32767 периода длительностью в 2 периода частоты pclk и 1 период длительнос- тью в 3 периода частоты pclk. Теперь рассмотрим более реалистичный случай, когда частота pclk равна 10 МГц. Тогда: PREINT = int х (pclk/32768) - 1 = 304; PREFRAC = pclk - ((PREINT + 1) x 32768) = 5760. В этом случае, на выходе предделителя в секунду будут 5760 периодов дли- тельностью в 306 периода частоты pclk, а остальные периоды будут иметь дли- тельность 305 периодов частоты pclk. Подобным образом любое значение частоты pclk большее чем 65.536 кГц, и содержащее четное число импульсов в секунду (Гц), может быть преобразовано в установки предделителя, чтобы получить тактовую частоту 32.768 кГц для син- хронизации модуля RTC. Единственная проблема заключается в том, что, если содержимое регистра PREFRAC ненулевое, то не все выходные «секундные» последовательности из 32768 импульсов будут иметь одинаковую длительность, равную одной секунде. Некоторые из них будут длиться на один период pclk больше, чем другие. Возникающая в результате этого обстоятельства флуктуа- ция может создать некоторые сложности при применении модуля RTC в прило- жениях, которые используют непосредственное содержимое регистра СТС. Блок-схема предделителя модуля RTC изображена на Рис. 18.2. pclk Рис. 18.2. Блок-схема предделителя модуля RTC
18.4. Делитель опорной частоты (предделитель) RTC 331 18.4.2. Операции предделителя RTC Блок из состава предделителя RTC, обозначенный на схеме (Рис. 18.2) как «Комбинаторная логика», определяет, когда цикл счета на убывание 13-битного счетчика PREINT должен быть удлинен на один период pclk. Чтобы корректно устанавливать номера удлиненных циклов и распределять их равномерно среди остальных циклов, комбинаторная логика связывает каждый бит в PREFRAC с комбинацией в 15-битном счетчике дробной части. Эта связь поясняется Табл. 18.17. Например, если в PREFRAC установлен бит 14 (представляющий долю 1/2), то половина циклов, подсчитанных 13-битным счетчиком целой части, будет удлинена комбинаторной логикой. Как видно из таблицы, всякий раз, когда значение LSB счетчика дробной части равно логической 1, комбинаторная ло- гика производит удлинение цикла счета на один период pclk, равномерно при этом распределяя удлиненные циклы. Если в PREFRAC установлен бит 13 (представляющий долю 1/4), то комби- наторная логика производит удлинение каждого четвертого цикла счета 13-бит- ного счетчика целой части на один период pclk (всякий раз, когда значение двух младших битов счетчика дробной части равно 10b). Таблица 18.17. Случаи, при которых удлиняется цикл счета счетчика целой части предделителя Состояние счетчика дробной части 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 XXX ХХХХ ХХХХ XXX1 1 — XXX хххх хххх ххЮ — 1 — XXX ХХХХ ХХХХ X100 1 — ххх хххх хххх 1000 1 — ххх хххх ххх 1 0000 1 — ххх хххх хх10 0000 1 — ххх хххх хЮО 0000 1 — ххх хххх 1000 0000 1 ххх xxxl 0000 0000 — 1 ххх хх 10 0000 0000 — 1 ххххЮО 0000 0000 — 1 ххх 1000 0000 0000 — 1 xxl 0000 0000 0000 — 1 хЮ 0000 0000 0000 — 1 — 100 6000 0000 0000 — 1
ГЛАВА 1 9 СТОРОЖЕВОЙ ТАЙМЕР (WDT) Сторожевой таймер WDT микроконтроллеров семейства LPC2000 обладает следующими основными особенностями: • осуществляет внутренний сброс микроконтроллера, если не производит- ся периодической перезагрузки WDT; • имеет режим отладчика; • работа WDT разрешается пользовательской программой, но для ее запре- та требуется аппаратный сброс, или сброс/прерывание от WDT; • позволяет производить некорректные/неполные варианты сброса/пре- рывания, если они разрешены; • имеет флаг, выставляемый при сбросе от WDT; • представляет собой программируемый 32-битный таймер с внутренним предделителем; • период времени тайм-аута может быть задан от (/рс1к х 256 х 4) до (/pcik х 232 х 4) в единицах (множителях) /рс1к х 4. Цель работы сторожевого таймера состоит в том, чтобы сбросить микрокон- троллер на некоторое разумное время (интервал тайм-аута сторожевого тайме- ра), например, если микроконтроллер перешел в ошибочное, непредусмотрен- ное алгоритмом состояние выполнения пользовательской программы. Когда сторожевой таймер разрешен, он генерирует системный сброс, если пользова- тельская программа, в течение заданного промежутка времени (тайм-аута), не осуществляет «подачу» (перезагрузку) сторожевого таймера . Далее в этой главе описаны особенности взаимодействия сторожевого тай- мера и других периферийных устройств микроконтроллера, а также процедуры сброса и начальной загрузки. 19.1. Описание WDT Сторожевой таймер состоит из предделителя с фиксированным коэффици- ентом деления 4 и 32-битного счетчика. Тактовые импульсы поступают на сто- рожевой таймер через предделитель. Счетчик сторожевого таймера считает на убывание. Минимальное значение, с которого может начаться счет на убыва- ние, равно OxFF. Задание значения, меньшего OxFF, приводит к загрузке в счет- чик значения OxFF. Таким образом, минимальная длительность сторожевого интервала (тайм-аута) составляет (/pcik х 256 х 4), максимальная — (/pclk х 232 х 4), а дискретность задания тайм-аута составляет (Zpcik х 4).
19.1. Описание WDT 333 Сторожевой таймер должен использоваться в приложении в соответствии со следующим алгоритмом: • установить значение константы перезагрузки сторожевого таймера в ре- гистре WDTC; • задать установки режима сторожевого таймера в регистре WDMOD; • запустить сторожевой таймер, путем записи числа ОхАА, а сразу вслед за ним — числа 0x55 в регистр WDFEED, т. е. произвести «подачу» стороже- вого таймера; • для того, чтобы предотвратить сброс/прерывание от сторожевого тайме- ра, «подача» сторожевого таймера должна быть вновь произведена пре- жде, чем наступит антипереполнениеего счетчика. Когда происходит антипереполнение счетчика сторожевого таймера, в про- граммный счетчик микроконтроллера автоматически записывается значение 0x00000000, как и в случае внешнего сброса. Флаг тайм-аута сторожевого таймера (WDTOF) может быть опрошен про- граммой, чтобы определить, не был ли вызван сброс сторожевым таймером. Флаг WDTOF сбрасывается пользовательской программой. Блок-схема сторожевого таймера изображена на Рис. 19.1. 2) Биты WDEN и WDRESET являются «липкими». Это значит, что после их программной установки они не могут быть сброшены иначе, как в результате антипереполнения счетчика сторожевого таймера или внешнего сброса. Рис. 19.1. Блок-схема сторожевого таймера (WDT) «Антипереполнение» счетчика, считающего на убывание, наступает, когда его со- держимое достигает 0, и в следующем цикле счета становится равным максимальному значению (OxFFFFFFFF для 32-битного счетчика). (Прим. науч, ред.)
334 Глава 19. Сторожевой таймер (WDT) 19.2. Описание регистров WDT Сторожевой таймер содержит 4 регистра, перечисленные в Табл. 19.1. Таблица 19.1. Карта регистров сторожевого таймера Название Описание Доступ Значение после сброса1) Адрес WDMOD Регистр режима сторожевого таймера. Содержит данные о режиме и текущем состоянии сторожевого таймера R/S (Чте- ние/Уста- новка) 0 ОхЕООООООО WDTC Регистр константы сторожевого таймера. Определяет значение времени тайм-аута сторожевого таймера R/W OxFF 0хЕ0000004 WDFEED Регистр последовательности «подачи» (инициализа- ции загрузки) сторожевого таймера. Запись в этот регистр числа OAAh, сразу после которой следует за- пись числа 55h, загружает в сторожевой таймер предварительно установленное значение WO NA 0хЕ0000008 WDTV Регистр значения сторожевого таймера. Возвращает текущее значение сторожевого таймера RO OxFF ОхЕООООООС !) Значение относится к данным, содержащимся только в используемых битах, и не включает содержимое зарезервированных битов. Регистр режима сторожевого таймера (WDMOD — ОхЕООООООО) Регистр WDMOD управляет операциями сторожевого таймера в соответс- твии с комбинациями битов WDEN и WDRESET, как показано в Табл. 19.2. Таблица 19.2. Режимы сторожевого таймера WDEN WDRESET Режим 0 X Отладка/работа без сторожевого таймера 1 0 Отладка с прерыванием от сторожевого таймера, но без сброса от него 1 1 Работа с прерыванием от сторожевого таймера и со сбросом от него Битовая структура регистра WDMOD приведена в Табл. 19.3. Таблица 19.3. Регистр режима сторожевого таймера (WDMOD — ОхЕООООООО) Номер бита WDMOD Название Описание Значение после сброса 0 WDEN Бит разрешения прерывания от сторожевого таймера (только установка) 0 1 WDRESET Бит разрешения сброса от сторожевого таймера (только уста- новка) 0 2 WDTOF Флаг тайм-аута сторожевого таймера 0 (только пос- ле внешнего сброса) 3 WDINT Флаг прерывания от сторожевого таймера (только чтение) 0 7:4 Зарезерви- рованы Пользовательское программное обеспечение не должно про- изводить запись в зарезервированные биты. Чтение зарезер- вированного бита возвращает неопределенное значение NA
19.2. Описание регистров WDT 335 После того, как биты WDEN и/или WDRESET программно устанавливают- ся, они не могут быть программно сброшены. Оба этих бита могут быть сбро- шены только с помощью внешнего сброса или в результате антипереполнения сторожевого таймера. Флаг тайм-аута сторожевого таймера WDTOF устанавливается, когда исте- кает тайм-аут сторожевого таймера. Этот флаг сбрасывается программно. Флаг прерывания от сторожевого таймера WDINT устанавливается, когда истекает тайм-аут сторожевого таймера. Этот флаг сбрасывается, когда происхо- дит любой сброс. Регистр константы сторожевого таймера (WDTC — 0хЕ0000004) Регистр WDTC определяет значение времени тайм-аута сторожевого тайме- ра. Каждый раз, когда производится корректная последовательность «подачи», содержимое WDTC перегружается в сторожевой таймер. WDTC представляет собой 32-битный регистр с восемью младшими битами, автоматически устанав- ливаемыми при сбросе. Запись в WDTC значений, меньших OxFF, приведет к загрузке в WDTC значения OxFF. Таким образом, минимальное значение време- ни тайм-аута составляет (tpclk х 256 х 4). Битовая структура регистра WDTC приведена в Табл. 19.4. Таблица 19.4. Регистр константы сторожевого таймера (WDTC — 0хЕ0000004) Номер бита WDTC Функция бита Описание Значение после сброса 31:0 Счет Интервал тайм-аута сторожевого таймера OxFF Регистр «подачи» сторожевого таймера (WDFEED — 0хЕ0000008) Запись числа ОхАА, а вслед за этим запись числа 0x55 в этот регистр (последо- вательность «подачи») перезагрузит сторожевой таймер значением регистра WDTC. Эта операция также запустит процесс отсчета сторожевого интервала тайм- аута, если сторожевой таймер был предварительно разрешен в регистре WDMOD. До момента разрешения битом WDEN, сторожевой таймер будет игнорировать ошибки «подачи». Необходимо отметить, что для разрешения работы сторожевого таймера недостаточно установки бита WDEN в регистре WDMOD, а требуется обя- зательно произвести последовательность «подачи». Начатая последовательность «подачи» должна быть завершена до того, как сторожевой таймер будет генериро- вать прерывание/сброс, другими словами, программа должна учитывать, что во время проведения «подачи» отсчет времени тайм-аута не прекращается. При вы- полнении последовательности «подачи», необходимо после записи числа ОхАА в регистр WDFEED следующей операцией произвести запись числа 0x55 в регистр WDFFED. В случае, если сторожевой таймер разрешен битом WDEN, прерыва- ние/сброс от WDT будет сгенерировано в течение второго периода pclk, после не- правильного доступа к регистрам WDT в ходе последовательности «подачи». Битовая структура регистра WDFEED приведена в Табл. 19.5. Таблица 19.5. Регистр последовательности «подачи» сторожевого таймера (WDFEED - 0хЕ0000008) Номер бита WDFEED Функция бита Описание Значение после сброса 7:0 «Подача» «Подача» состоит из записи в этот регистр числа ОхАА, после чего следует запись в этот же регистр числа 0x55 Неопреде- ленное
336 Глава 19. Сторожевой таймер (WDT) Регистр значения сторожевого таймера (WDTV — ОхЕООООООС) Регистр WDTV используется, чтобы программно считывать текущее значе- ние сторожевого таймера. Битовая структура регистра WDTV приведена в Табл. 19.6. Таблица 19.6. Регистр значения сторожевого таймера (WDTV — ОхЕООООООС) Номер бита WDTV Функция бита Описание Значение после сброса 31:0 Счет Текущее значение счетчика сторожевого таймера OxFF 19.3. Рекомендации по использованию сброса от WDT и внешнего запуска В случае, если на выводы BOOT 1:0 микроконтроллера LPC2000, имеющего контроллер внешней памяти, поданы соответствующие внешние уровни для организации выполнения программы из внешней памяти, а сторожевой таймер программно разрешен и может производить сброс (при отсутствии периодичес- кого перезапуска), то следует предпринять определенные меры предосторож- ности, чтобы избежать возможных проблем, связанных с взаимным влиянием перечисленных функций. Меры эти заключаются в следующем. Во-первых, выводы ВООТ1 и/или ВООТО должны быть «подтянуты» к об- щему проводу внешними резисторами, а не транзисторами, управляемыми НИЗКИМ уровнем сигнала RESET, потому что сигнал RESET не переходит в НИЗКИЙ уровень во время сброса от сторожевого таймера. Во-вторых, если один или оба вывода BOOT 1:0 используются в качестве входов в приложении, то внешние цепи прикладной системы, подключенные к этим входам, не должны управлять их состояниями во время внутреннего сбро- са, сгенерированного сторожевым таймером. (Один из способов обеспечить выполнение этого условия состоит в том, чтобы использовать один из выводов CS3:0, чтобы включать управление входами ВООТ1:0 от внешних цепей.) Если эти два условия не могут быть выполнены, тогда в приложении следует использовать не встроенный сторожевой таймер, а какие-то внешние средства, выполняющие его функцию.
ГЛАВА 20 ОРГАНИЗАЦИЯ И ПРОГРАММИРОВАНИЕ FLASH-ПАМЯТИ В этой главе речь пойдет об организации встроенной Flash-памяти микро- контроллеров семейства LPC2000 и встроенного загрузчика Flash-памяти. Опи- сание загрузчика включает в себя описания интерфейса внутрисистемного про- граммирования Flash-памяти микроконтроллера (ISP) и интерфейса програм- мирования Flash-памяти в составе пользовательского приложения (IAP). 20.1. Система Flash-памяти LPC2000 Встроенная Flash-память микроконтроллеров LPC2000 разбита на сектора. Количество и размеры секторов системы Flash-памяти в различных микроконт- роллерах LPC2000 разные, о чем будет подробнее рассказано ниже. Адресное пространство Flash-памяти начинается с нулевого адреса и продолжается в сто- рону возрастания адресов. Встроенная Flash-память микроконтроллеров семейства LPC2000 способна выдержать не менее 10000 циклов стирания и циклов записи во всем рабочем температурном диапазоне. 20.2. Загрузчик Flash-памяти Встроенный загрузчик Flash-памяти LPC2000 управляет операциями на- чальной инициализации после сброса, а также является средством для програм- мирования Flash-памяти. Это может быть как первый сеанс программирования изначально «чистого» микроконтроллера, так и стирание и перепрограммиро- вание ранее уже запрограммированного микроконтроллера, а также програм- мирование Flash-памяти прикладной пользовательской программой, выполня- емое в составе пользовательского приложения на базе микроконтроллера LPC2000. Встроенный загрузчик Flash-памяти микроконтроллеров LPC2000 имеет следующие основные характеристики: • внутрисистемное программирование (ISP) — встроенная Flash-память программируется и стирается с использованием программного обеспече- ния последовательного порта и загрузчика, которые резидентно находят- ся в памяти пользовательской микроконтроллерной системы; • программирование в составе приложения (IAP) — встроенная Flash-па- мять программируется и стирается с использованием прикладного про- граммного обеспечения пользователя. 304
338 Глава 20. Организация и программирование Flash-памяти Код загрузчика Flash-памяти выполняется каждый раз, когда производит- ся включение питания или сброс устройства. Загрузчик может выполнять ко- манды обработчика ISP или пользовательский прикладной код. НИЗКИЙ уровень после сброса на выводе Р0.14 расценивается логикой микроконтрол- лера, как внешний аппаратный запрос на запуск обработчика команд ISP. Этот вывод программно опрашивается логикой микроконтроллера. Если в момент, когда на вывод RST поступает внешний положительный перепад (фронт), на выводе XTAL1 присутствует надлежащий тактовый сигнал, то микроконтрол- леру может потребоваться до 3 мс для того, чтобы опросить вывод Р0.14 и при- нять решение на выполнение кода пользователя или на запуск обработчика команд ISP. Когда на Р0.14 подан внешний НИЗКИЙ уровень и установлен флаг пере- полнения сторожевого таймера, внешний аппаратный запрос на запуск обра- ботчика команд ISP микроконтроллером игнорируется. Если такой запрос отсутствует (на вывод Р0.14 подан ВЫСОКИЙ уровень после сброса), то автоматически производится поиск действительной (коррект- ной) пользовательской программы. Если действительная пользовательская программа найдена, то ей передается управление. Если действительная пользо- вательская программа не найдена, то вызывается подпрограмма автоматичес- кой установки скорости обмена (auto-baud). Стоит обратить особое внимание на вывод Р0.14, который используется как вход аппаратного запроса ISP. Когда Р0.14 после сброса находится в высокоим- педансном состоянии, важно, чтобы пользователь обеспечил наличие подклю- ченных к этому выводу внешних цепей (резистор, подтянутый к «плюсу» источ- ника питания или другая цепь), чтобы подать на него соответствующий логи- ческий уровень. В противном случае, может произойти произвольный переход микроконтроллера в режим ISP. 20.3. Карта памяти после сброса Загрузочный сектор размером 8К (12К) постоянно находится в области старших адресов встроенной Flash-памяти микроконтроллера. (Например, для LPC2114/24/19/29/94 и LPC2212/14/92/94 Flash-память начинается с ад- реса 0x0001 Е000 в микроконтроллерах с объемом Flash-памяти 128К или с адреса 0x0003 Е000 в микроконтроллерах с объемом Flash-памяти 256К.) После любого сброса весь загрузочный сектор также «отображается» на об- ласть самых старших адресов всего пространства памяти, т. е. загрузочный сектор мы можем видеть и в области памяти, начинающейся с адреса 0x7FFF Е000. Загрузчик Flash-памяти предназначен для того, чтобы работать именно в этой области памяти (Flash), однако ISP и IAP используют пользовательское программное обеспечение, частично расположенное во встроенной оператив- ной памяти (об использовании оперативной памяти рассказано ниже в этой главе). Вектора прерывания, постоянно находящиеся в загрузочном секторе встроенной Flash-памяти, после сброса также становятся активными, т. е. млад- шие 64 байта загрузочного сектора отображаются в область памяти, начинаю- щейся с адреса 0x0000 0000. Вектор сброса содержит команду перехода к точке входа в подпрограмму загрузчика Flash-памяти.
20,4. Критерий действительного пользовательского программного кода и 339 На Рис. 20.1 представлен вид карты памяти после любого сброса, на приме- ре микроконтроллеров LPC2114/24/19/29/94 и LPC2212/14/92/94 с объемом Flash-памяти 128К. Рис, 20.1. Вид карты памяти микроконтроллера LPC2000 с объемомР1а8И-памяти 128К после любого сброса 20.4. Критерий действительного пользовательского программного кода Критерий действительного пользовательского программного кода1) состоит в следующем. Зарезервированный вектор прерывания ARM, расположенный по адресу 0x0000 0014, должен содержать дополнение до двух контрольной сум- мы остальных векторов прерывания («действительную сигнатуру»). В таком случае, контрольная сумма всех векторов равна 0. Загрузчик кода отключает отображение векторов прерываний на загрузочный блок, затем вычисляет кон- трольную сумму векторов прерываний в секторе 0 Flash-памяти. Если вычис- ленная сумма соответствует заданной сигнатуре, то управление передается пользовательской программе и в программный счетчик загружается адрес 0x0000 0000. Следовательно, пользовательский вектор сброса во Flash-памяти должен содержать команду перехода к точке входа в пользовательскую при- кладную программу. Действительный пользовательский программный код — это любой программный код, записанный во встроенную Flash-память микроконтроллера. Действительная (или истинная) пользовательская сигнатура формируется автоматически при программирова- нии Flash-памяти этим кодом. Если Fash-память еще не программировалась или была полностью стерта пользователем, то истинная пользовательская сигнатура сформирова- на не будет и встроенная программа-загрузчик (записанная во Flash-память на заводе и пользовательской программе недоступная) не передаст управление после сброса по ад- ресу 0x00000000 Flash-памяти. (Прим. науч, ред.)
340 Глава 20. Организация и программирование Flash-памяти Если сигнатура недействительна, то подпрограмма автоматической уста- новки скорости обмена (auto-baud) производит синхронизацию скорости обме- на с главным компьютером (хостом) через последовательный порт 0. Для осу- ществления синхронизации, хост должен послать символ синхронизации ('?') и ожидать ответа. Параметры настройки последовательного порта должны быть следующими: 8 информационных битов, 1 столовый бит и отсутствие контроля четности. Подпрограмма автоматической установки скорости обмена измеряет время передачи бита полученного символа синхронизации в собственных еди- ницах частоты и соответствующим образом программирует генератор скорости обмена через последовательный порт. Затем она посылает в хост символьную строку ASCII «Synchronized<CR><LF>». В ответ на это, хост должен послать символьную строку «Synchronized<CRXLF>». Подпрограмма автоматической установки скорости обмена анализирует полученные символы, чтобы проверить настройку синхронизации. Если про- верка синхронизации осуществлена успешно, хосту посылается символьная строка «OK<CRXLF>». Хост должен ответить, посылая значение частоты ре- зонатора (в кГц), которая используется в микроконтроллере для синхрониза- ции обмена данными. Например, если используется частота 10 МГц, то кор- ректный ответ хоста будет «10000<CRXLF>». После получения значения час- тоты резонатора, хосту посылается символьная строка «OK<CRXLF>». Если при проверке синхронизации обнаружилась ошибка (настройка порта микро- контроллера не соответствует настройке порта хоста), то подпрограмма авто- матической установки скорости обмена вновь ожидает поступления символа синхронизации. Для корректной работы подпрограммы автоматической установки скорости обмена, частота резонатора микроконтроллера должна быть больше или равна 10 МГц. Встроенная система ФАПЧ загрузочным кодом не используется. Как только значение частоты резонатора получено, производится частичная инициализация и вызывается обработчик команд ISP. Из соображений безопас- ности, перед выполнением команд, приводящих к стиранию/записи Flash-па- мяти и команды Go, необходимо выполнить команду разблокировки Unlock. Ос- тальные команды могут быть выполнены без предварительного выполнения ко- манды разблокировки. Команду Unlock необходимо выполнить хотя бы однажды за сессию ISR Подробное описание команд Go и Unlock приведено ни- же при описании команд ISP. Следует отметить, что действительная пользовательская сигнатура автома- тически формируется при программировании Flash-памяти с помощью ISP файлом «прошивки» пользовательской программы. 20.5. Коммуникационные протоколы Все команды ISP нужно посылать как отдельные символьные строки ASCII. Строки должны заканчиваться управляющими символами «Возврат каретки» (CR) и/или «Перевод строки» (LF). Дополнительные символы <CR> и <LF> игнорируются. Все ответы ISP посылаются как символьные строки ASCII, за- канчивающиеся символами <CR> и <LF>. Данные посылаются и принимают- ся в формате UU-encoded. Формат команды ISP: «Команда Параметр_0 Параметр_1... Параметр п <CR> <LF>» «Данные» (поле используется только для команд записи).
20.5. Коммуникационные протоколы 341 Формат ответа ISP: «Возвращаемый_код <CR> <LF> Ответ_0 <CR> <LF> Ответ_1 <CR> <LF>... Ответ_п <CR> <LF>» «Данные» (поле используется только для команд чтения). Формат данных ISP. Поток данных ISP передается в формате UU-encode. Алгоритм UU-encode преобразует 3 байта двоичных данных в 4 байта печат- ных символов ASCII. Этот формат является более эффективным, чем формат Hex, который преобразует 1 байт двоичных данных в 2 байта шестнадцатерич- ного кода ASCII. При передаче данных отправитель должен послать конт- рольную сумму после передачи 20 строк в формате UU-encode. Длина любой строки в формате UU-encode не должна превышать 61 символа (байта), т. е. строка может содержать до 45 байтов данных. Получатель должен сравнить принятую контрольную сумму с вычисленной контрольной суммой получен- ных байтов. Если контрольные суммы совпадут, то получатель должен отве- тить строкой «ОК <CR> <LF>», чтобы разрешить дальнейшую передачу. Ес- ли контрольные суммы не совпадают, то получатель должен ответить строкой «RESEND<CR> <LF>». В ответ отправитель должен повторно передать бай- ты. Описание формата UU-encode доступно в сети Интернет по адресу: http://www.wotsit.org. Управление потоком ISP. Для того, чтобы предотвратить потерю данных, микроконтроллер использует программный способ управления потоком дан- ных XON/XOFF, который должен обеспечивать буферизацию при переполне- ниях. Если скорость поступления данных чересчур высока, посылается управ- ляющий символ ASCII DC3 (stop), чтобы остановить поток данных. Поток дан- ных возобновляется после посылки управляющего символа ASCII DC1 (start). При этом, хост должен поддерживать такой же способ управления потоком данных. Аварийное прекращение работы команды ISP. Команды могут быть прерваны (отменены) путем посылки управляющего символа ASCII «ESC». Этот символ не значится, как команда, в списке команд ISP. Как только микроконтроллер получает управляющий код, обработчик команд ISP переходит в режим ожида- ния новой команды. Прерывания в ходе ISP. Вектора прерываний, расположенные в загрузочном секторе Flash-памяти, активны после любого сброса. Прерывания в ходе IAP. Встроенная Flash-память недоступна во время опе- раций стирания/записи. Когда начинает выполняться пользовательский при- кладной код, вектора прерывания в пользовательской области Flash-памяти активизируются. Перед поступлением запроса IAP на стирание/запись Flash- памяти, пользователь должен или отключить прерывания, или гарантировать, что активными являются пользовательские вектора прерывания в оператив- ной памяти и что подпрограммы обработки прерывания постоянно находятся в оперативной памяти. Код IAP запрещает использование прерываний или от- ключает их. Оперативная память, используемая обработчиком команд ISP. Команды ISP используют встроенную оперативную память в диапазоне адресов от 0x4000 0120 до 0x4000 0IFF. Пользовательской программе разрешается использовать эту об- ласть адресов, но ее содержимое может быть потеряно после сброса. Команды программирования Flash-памяти используют стековые 32 байта встроенной оперативной памяти. Стек расположен в вершине оперативной памяти и растет вниз. Максимальный размер стека — 256 байт.
342 Глава 20. Организация и программирование Flash-памяти Оперативная память, используемая обработчиком команд IAP. Команды про- граммирования Flash-памяти используют стековые 32 байта встроенной опера- тивной памяти. Максимальный размер стека в пользовательском пространстве стека составляет 128 байт и он растет вниз. Оперативная память, используемая RealMonitor. Конфигурируемый про- граммный модуль RealMonitor использует встроенную оперативную память в диапазоне адресов 0x4000 0040 до 0x4000 011Е Пользовательская программа может использовать эту область, если не требуется производить отладку с по- мощью RealMonitor. Загрузчик Flash-памяти не инициализирует стек для RealMonitor. 20.6. Блок-схема процесса загрузки Блок-схема процесса загрузки (для загрузчика версий до 1.61) приведена на Рис. 20.2. Блок-схема процесса загрузки (для загрузчика версий 1.61 и старше) приведена на Рис. 20.3. Рис, 20.2, Блок-схема алгоритма загрузки для загрузчика версии до 1.61
20.7. Номера секторов Flash-памяти 343 -Рис. 20.3. Блок-схема алгоритма загрузки для загрузчика версии 1.61 и старше 20.7. Номера секторов Flash-памяти Некоторые команды IAP и команды ISP оперируют параметром «сектор» Flash-памяти и определяют номер сектора. В Табл. 20.1 приведено соответствие между номерами секторов и адресами памяти для микроконтроллеров LPC2101/02/03, в Табл. 20.2 — для микроконтроллеров LPC2104/05/06, в
344 Глава 20. Организация ц программирование Flash-памяти Табл. 20.3 - для микроконтроллеров LPC2114/24/19/29/94 и LPC2212/14/92/94, в Табл. 20.4 — для микроконтроллеров LPC2131/32/38, а в Табл. 20.5 — для мик- роконтроллеров LPC2141/42/44/46/48. Подпрограммы IAP, ISP и RealMonitor расположены в загрузочном секторе. Загрузочный сектор имеется во всех микроконтроллерах. Команды ISP и IAP не позволяют производить операции записи/стирания/перехода (write/erase/go) в загрузочном секторе. Например, в микроконтроллеров, имеющих 128К Flash- памяти, только 120К из нее доступны для пользовательской программы. В мик- роконтроллерах, имеющих 256К Flash-памяти, доступны для пользовательской программы 248К. Таблица 20.1. Организация Flash-памяти в микроконтроллерах LPC2101/02/03 Номер сектора Размер сектора [Кбайт] Диапазон адресов (в шестнадцатиричном формате) LPC2101 (8 Кбайт) LPC2102 (16 Кбайт) LPC2103 (32 Кбайт) 0 4 0x0000 0000...0х0000 0FFF • • • 1 4 0x0000 1000...0x0000 1FFF • • • 2 4 0x0000 2000...0x0000 2FFF • • 3 4 0x0000 3000...0x0000 3FFF • • 4 4 0x0000 4000...0x0000 4FFF • 5 4 0x0000 5000...0x0000 5FFF • 6 4 0x0000 6000...0х0000 6FFF • 7 4 0x0000 7000...0x0000 7FFF • Таблица 20.2. Организация Flash-памяти в микроконтроллерах LPC2104/05/06 Номер сектора Диапазон адресов (в шестнадцатиричном формате) Номер сектора Диапазон адресов (в шестнадцатиричном формате) 0 0x0000 0000... 1FFF 8 0x0001 0000... 1FFF 1 0x0000 2000...3FFF 9 0x0001 2000...3FFF 2 0x0000 4000...5FFF 10 (ОхОА) 0x0001 4000...5FFF 3 '' 0x0000 6000...7FFF И (0x0В) 0x0001 6000...7FFF 4 0x0000 8000...9FFF 12 (ОхОС) 0x0001 8000...9FFF 5 0x0000 A000...BFFF 13 (0x0D) 0x0001 A000...BFFF 6 0x0000 C000...DFFF 14 (0х0Е) 0x0001 C000...DFFF 7 0x0000 E000...FFFF 15 (0x0F) 0x0001 E000...FFFF
20.7. Номера секторов Flash-памяти 345 Таблица 20.3. Организация Flash-памяти в микроконтроллерах LPC2114/24/19/29/94 и LPC2212/14/92/94 Номер сектора Адреса памяти и размеры сектора (в шестнадцатиричном формате) Для объема памяти 128 Кбайт Размер сектора [Кбайт] Для объема памяти 256 Кбайт Размер сектора [Кбайт] 0 0x0000 0000... 1FFF 8 0x0000 0000... 1FFF 8 1 0x0000 2000...3FFF 8 0x0000 2000...3FFF 8 2 0x0000 4000...5FFF 8 0x0000 4000...5FFF 8 3 0x0000 6000...7FFF 8 0x0000 6000...7FFF 8 4 0x0000 8000...9FFF 8 0x0000 8000...9FFF 8 5 0x0000 A000...BFFF 8 0x0000 A000...BFFF 8 6 0x0000 C000...DFFF 8 0x0000 C000...DFFF 8 7 0x0000 E000...FFFF 8 . 0x0000 E000...FFFF 8 8 0x0001 0000... 1FFF 8 0x0001 0000...FFFF 64 9 0x0001 2000...3FFF 8 0x0002 0000...FFFF 64 10 (ОхОА) 0x0001 4000...5FFF 8 0x0003 0000... 1FFF 8 И (0x0В) 0x0001 6000...7FFF 8 0x0003 2000...3FFF 8 ' 12 (ОхОС) 0x0001 8000...9FFF 8 0x0003 4000...5FFF 8 13 (OxOD) 0x0001 A000...BFFF 8 0x0003 6000...7FFF 8 14 (ОхОЕ) 0x0001 C000...DFFF 8 0x0003 8000...9FFF 8 15 (OxOF) 0x0001 E000...FFFF1' 8 0x0003 A000...BFFF 8 16 (0x10) 0x0003 C000...DFFF 8 17(0x11) 0x0003 E000...FFFF1’ 8 !) Загрузочный блок всегда находится на вершине доступной встроенной Flash-памяти. Для микроконтроллера с Flash-памятью объемом 128К, это 16-й сектор (сектор с табличным номером 15), а для микроконтроллера с Flash-памятью объемом 256К, это 18-й сектор (сектор с табличным номером 17). Сектор Flash-памяти, где постоянно находится загрузочный блок, не доступен для хранения пользовательского кода.
346 Глава 20. Организация и программирование Flash-памяти Таблица 20.4. Организация Flash-памяти в микроконтроллерах LPC2131/32/38 Номер сектора Размер сектора [Кбайт] Диапазон адресов (в шестнадцатиричном формате) LPC2131 (32 Кбайт) LPC2132 (64 Кбайт) LPC2138 (512 Кбайт) 0 4 0x0000 0000...0FFF 0x0000 0000...0FFF 0x0000 0000...0FFF 1 4 0x0000 1000... 1FFF 0x0000 1000... 1FFF 0x0000 1000... 1FFF 2 4 0x0000 2000...2FFF 0x0000 2000...2FFF 0x0000 2000...2FFF 3 4 0x0000 3000...3FFF 0x0000 3000...3FFF 0x0000 3000...3FFF 4 4 0x0000 4000...4FFF 0x0000 4000...4FFF 0x0000 4000...4FFF 5 4 0x0000 5000...5FFF 0x0000 5000...5FFF 0x0000 5000...5FFF 6 4 0x0000 6000...6FFF 0x0000 6000...6FFF 0x0000 6000...6FFF 7 4 0x0000 7000...7FFF 0x0000 7000...7FFF 0x0000 7000...7FFF 8 32 0x0000 8000...FFFF 0x0000 8000...FFFF 9 32 0x0001 0000...7FFF 10 (ОхОА) 32 0x0001 8000...FFFF 11(0x0В) 32 0x0002 0000...7FFF 12 (ОхОС) 32 0x0002 8000...FFFF 13 (OxOD) 32 0x0003 0000...7FFF 14 (ОхОЕ) 32 0x0003 8000...FFFF 15 (OxOF) 32 0x0004 0000...7FFF 16 (0x10) 32 0x0004 8000...FFFF 17(0x11) 32 0x0005 0000...7FFF 18 (0x12) 32 0x0005 8000...FFFF 19 (0x13) 32 0x0006 0000...7FFF 20 (0x14) 32 0x0006 8000...FFFF 21 (0x15) 32 0x0007 0000...7FFF 22 (0x16) 4, 0x0007 8OOO...8FFF 23 (0x17) 4 - 0x0007 9000...9FFF 34 (0x18) 4 0x0007 A000...AFFF 25 (0x19) 4 0x0007 B000...BFFF 26 (0х1А) 4 0x0007 C000...CFFF
20.8. Защита кода от чтения 347 Таблица 20.5. Организация Flash-памяти в микроконтроллерах LPC2141/42/44/46/48 Номер сектора Размер сектора [Кбайт] Диапазон адресов (в шестнадцатиричном формате) LPC2141 (32 Кбайт) LPC2142 (64 Кбайт) LPC2144 (128 Кбайт) LPC2146 (256 Кбайт) LPC2148 (512 Кбайт) 0 4 0x0000 0000...0х0000 0FFF • • • • • 1 4 0x0000 1ООО...ОхОООО 1FFF • • • • • 2 4 0x0000 2000...0x0000 2FFF • • • • • 3 4 0x0000 ЗООО...ОхОООО 3FFF • • • • • 4 4 0x0000 4000...0x0000 4FFF • • • • • 5 4 0x0000 5000...0x0000 5FFF • • • • • 6 4 0x0000 6000...0х0000 6FFF • • • • • 7 4 0x0000 7000...0x0000 7FFF • • • • • 8 32 0x0000 8000...0x0000 FFFF • • • • 9 32 0x0001 0000...0х0001 7FFF • • • 10 (ОхОА) 32 0x0001 8000...0x0001 FFFF • • • 11 (0x0В) 32 0x0002 0000...0x0002 7FFF • • 12 (ОхОС) 32 0x0002 8000...0x0002 FFFF • • 13 (OxOD) 32 0x0003 ОООО...ОхОООЗ 7FFF • • 14 (ОхОЕ) 32 0x0003 8000...0x0003 FFFF • • 15 (OxOF) 32 0x0004 0000...0x0004 7FFF • 16 (0x10) 32 0x0004 8000...0x0004 FFFF • 17(0x11) 32 0x0005 0000...0x0005 7FFF • 18(0x12) 32 0x0005 8000...0x0005 FFFF • 19(0x13) 32 0x0006 0000...0x0006 7FFF • 20 (0x14) 32 0x0006 8000...0x0006 FFFF • 21 (0x15) 32 0x0007 0000...0x0007 7FFF • 22(0x16) 4 0x0007 8000...0x0007 8FFF • 23 (0x17) 4 0x0007 9000...0x0007 9FFF • 34 (0x18) 4 0x0007 A000...0x0007 AFFF • 25 (0x19) 4 0x0007 B000...0x0007 BFFF 26 (0х1А)__ 4 0x0007 C000...0x0007 CFFF • 20.8. Защита кода от чтения Защита кода микроконтроллера от чтения доступна в микроконтроллерах с загрузчиком версии 1.61 и выше. Защита кода от чтения разрешается путем про- граммирования Flash-памяти по адресу OxiFC (пользовательский сектор О Flash-памяти) значением 0x87654321 (десятичное значение 2271560481). Адрес
348 Глава 20. Организация и программирование Flash-памяти 0x1 FC используется, чтобы разрешить использование некоторого участка памя- ти для обработчика исключительных ситуаций (ИС). Если защита кода от чте- ния разрешена, то заблокированы порт отладки JTAG, внешняя начальная за- грузка памяти и нижеперечисленные команды ISP: • чтение памяти; • запись в оперативную память; • переход (Go)j • копирование оперативной памяти во Flash-память. При попытке выполнения перечисленных команд ISP возвращается сооб- щение CODE_READ_PROTECTION_ENABLED. Команда стирания ISP производит стирание всех пользовательских секто- ров только тогда, когда разрешена защита кода от чтения. Это ограничение не действует, если защита кода от чтения запрещена. Защита кода от чтения не затрагивает команды IAP. 20.9. Команды ISP Обработчик команд ISP оперирует командами, перечисленными в Табл. 20.6. Для каждой команды обработчиком поддерживаются детальные коды возврата. Обработ- чик команд ISP возвращает код возврата INVALID COMMAND, когда получает не- определенную команду. Команды и коды возврата приведены в формате ASCII. Таблица 20.6. Сводная таблица команд ISP Команда ISP Формат команды Описание Разблокировка U <Код разблокировки > Табл. 20.7 Установка скорости обмена В <Скорость обмена> <Столовый бит> Табл. 20.8 Эхо А <Установка> Табл. 20.10 Запись в оперативную память W < Начальный адрес> < Количество байтов> Табл. 20.11 Чтение памяти R <Адрес> < Количество байтов> Табл. 20.12 Подготовить сектор(-а) к операции записи Р <Начальный номер сектора> <Конечный номер сектора> Табл. 20.13 Копировать оперативную память во Flash-память С <Адрес Flash-памяти> <Адрес оперативной памяти > < Количество байтов > Табл. 20.14 Переход G <Адрес> <Режим> Табл. 20.15 Стереть секгор(-а) Е < Начальный номер сектора> < Конечный номер сектора> Табл. 20.16 Заполнить пробелами сектор(-а) I < Начальный номер сектора> < Конечный номер секгора> Табл. 20.17 Читать идентификатор устройства (ID) J Табл. 20.18 Читать версию загрузчика кода К Табл. 20.19 Сравнение М <Адрес1> <Адрес2> < Количество байтов> Табл. 20.20 Код CMD_SUCCESS возвращается обработчиком команд ISP только в том слу- чае, когда полученная команда ISP была полностью выполнена и хост может подавать новую команду ISP. Исключениями из этого правила являются команды: «Установка скорости обмена», «Запись в оперативную память», «Чтение памяти» и «Переход». Ниже подробно описывается каждая из команд ISP.
20.9. Команды ISP 349 Разблокировка <Код разблокировки^ Описание этой команды приведено в Табл. 20.7. Таблица 20.7. Команда ISP «Разблокировка» Команда и Вход Код разблокировки: 23130 Код возврата CMD_SUCCESS | INVALID CODE| PARAM_ERROR Описание Эта команда используется, чтобы разблокировать Flash-память для последующего выполнения команд записи/стирания и перехода Пример использования «U 23130 <CR> <LF>» разблокирует Flash-память для команд записи/стирания и перехода Установка скорости обмена <Скорость обмена> <Столовый бит>. Описание этой команды приведено в Табл. 20.8. Зависимость между возможными скоро- стями обмена (в бодах) и частотой внешнего кварцевого резонатора (в МГц) приведена в Табл. 20.9. Таблица 20.8. Команда ISP «Установка скорости обмена» Комацда в Вход Скорость обмена в бодах: 960011920013840015760011152001 230400 Столовый бит: 11 2 Код возврата CMDSUCCESS | INVALID_BAUD_RATE | INVALID STOP BIT | PARAM_ERROR Описание Эта команда используется, изменить скорость обмена. Новая скорость обмена устанавливается после того, как обработчик команд возвращает код CMD_SUCCESS Пример использования «В 57600 1 <CR> <LF>» устанавливает скорость обмена через последовательный порт 57600 бод и 1 столовый бит Таблица 20.9. Зависимость между возможными скоростями обмена и частотой внешнего кварцевого резонатора Частота внешнего кварцевого резонатора [МГЦ] Скорость обмена ISP [бод] 9600 19200 38400 57600 115200 230400 10.0000 • • • 11.0592 • • • Г2.2880 • • • 14.7456 • • • • • • 15.3600 • 18.4320 • • • 19.6608 • • • 24.5760 • • • 25.0000 • • •
350 Глава 20. Организация и программирование Flash-памяти Эхо <установка>. Описание этой команды приведено в Табл. 20.10. Таблица 20.10. Команда ISP «Эхо» Команда А Вход Установка: ON=11 OFF=0 Код возврата CMD_SUCCESS | PARAM_ERROR Описание По умолчанию, команда «Эхо» включена (ON). При включенном «Эхо» обработ- чик команд ISP посылает полученные последовательные данные обратно в хост Пример использования «А 0 <CR> <LF>» выключает «Эхо» (OFF) Запись в оперативную память < Начальный адрес> < Количество байтов>. Хост должен посылать данные только после получения кода возврата CMD_SUCCESS. В ходе обмена, хост должен передавать контрольную сумму после передачи каждых 20 строк данных в формате UU-encode. Контрольная сумма вырабатывается путем сложения байтов необработанных данных (до их кодирования в формат UU-encode) и сбрасывается после передачи 20 строк в формате UU-encode. Длина любой строки формата UU-encode не должна пре- высить 61 символ (байт), т. е. может содержать до 45 байт данных. Когда коли- чество исходных данных соответствует менее, чем двадцати строкам UU- encode, контрольная сумма должна вырабатываться, исходя из фактического количества передаваемых байтов. Обработчик команды ISP сравнивает принятую контрольную сумму с вы- численной контрольной суммой полученных байтов. Если эти контрольные суммы совпадают, то обработчик команд ISP отвечает строкой «ОК <CR> <LF>», чтобы продолжить дальнейшую передачу. Если контрольные суммы не совпадают, то обработчик команд ISP отвечает строкой «RESEND <CR> <LF>». В ответ, хост должен повторно передать соответствующие байты данных. Описание этой команды приведено в Табл. 20.11. Таблица 20.11. Команда ISP «Запись в оперативную память» Команда W Вход Начальный адрес: адрес в оперативной памяти, начиная с которого должны быть записаны байты данных. Этот адрес должен лежать в границах слова (32 бита). Количество байтов: Количество байтов, которые будут записаны. Это значение должно быть кратным 4 Код возврата CMDSUCCESS | ADDR_ERROR (Адрес не в границах слова) | ADDR NOT MAPPED | COUNT_ERROR (Количество байтов не кратно 4) | PARAM_ERROR CODE READ PROTECTION ENABLED (включен режим защиты кода от чтения) Описание Эта команда используется, чтобы загрузить данные в оперативную память. Дан- ные должны быть в формате UU-encoded. С загрузчиком версии 1.61 и выше эта команда блокирована, когда разрешена защита кода от чтения. Пример использования «W1073742336 4 <CR> <LF>» запись 4 байт данных по адресу 0x4000 0200 Чтение памяти <Адрес> <количество байтов>. Поток данных сопровождается кодом возврата успешного выполнения команды. В ходе обмена, обработчик команд должен передавать контрольную сумму после передачи 20 строк данных
20,9. Команды ISP 351 в формате UU-encode. Контрольная сумма вырабатывается путем сложения байтов необработанных данных (до их кодирования в формат UU-encode) и сбрасывается после передачи 20 строк в формате UU-encode. Длина любой строки формата UU-encode не должна превысить 61 символ (байт), т. е. может содержать до 45 байт данных. Когда количество исходных данных соответствует менее чем двадцати строкам UU-encode, то контрольная сумма должна выраба- тываться, исходя из фактического количества передаваемых байтов. Хост сравнивает принятую контрольную сумму с вычисленной контроль- ной суммой полученных байтов. Если эти контрольные суммы совпадают, то хост отвечает строкой «ОК <CR> <LF>», чтобы продолжить дальнейшую пере- дачу. Если контрольные суммы не совпадают, то хост отвечает строкой «RESEND <CR> <LF>». В ответ, обработчик команд ISP должен повторно пе- редать соответствующие байты данных. Описание этой команды приведено в Табл. 20.12. Таблица 20.12. Команда ISP «Чтение памяти» Команда R Вход Начальный адрес: адрес в оперативной памяти, начиная с которого должны быть прочитаны байты данных. Этот адрес должен лежать в границах слова (32 бита). Количество байтов: количество байтов, которые будут прочитаны. Это значение должно быть кратным 4 Код возврата CMD_SUCCESS сопровождающий <фактические данные (в формате UU-encode)> | ADDR ERROR (Адрес не в границах слова) | ADDR_NOT_MAPPED | COUNT ERROR (Количество байтов не кратно 4) | PARAM_ERROR CODE_READ_PROTECTION_ENABLED (включен режим защиты кода от чтения) Описание Эта команда используется, чтобы читать данные из оперативной памяти. С загруз- чиком версии 1.61 и выше эта команда блокирована, когда разрешена защита кода от чтения Пример использования «R 1073741824 4 <CR> <LF>» чтение 4 байт данных по адресу 0x4000 0000 Подготовить сектор(-а) к операции записи <Начальный номер сектора> <Ко- нечный номер сектора> — эта команда производит операцию «запись/стирание» Flash-памяти за два шага. Описание этой команды приведено в Табл. 20.13. Таблица 20.13. Команда ISP «Подготовить сектор (-а) к операции записи» Команда Р Вход Начальный номер сектора. Конечный номер сектора: должен быть больше или равен начальному номеру сектора Код возврата CMD SUCCESS | BUSY] INVALID_SECTOR | PARAM_ERROR Описание Эта команда должна быть выполнена перед выполнением команды «Копировать опе- ративную память во Flash-память» или «Стереть секгор(-а)», чтобы снять с соответс- твующего сектора (секторов) защиту от записи. После успешного выполнения коман- ды «Копировать оперативную память во Flash-память» или «Стереть секгор(-а)», соответствующий сектор(-а) будут снова защищены от записи. Загрузочный сектор не может быть подготовлен к записи этой командой. Для подготовки к записи одного (отдельного) сектора используются одинаковые значения начального и конечного но- меров сектора Пример использования «Р 0 0 <CR> <LF>» подготовка к записи сектора 0 Flash-памяти
352 Глава 20. Организация и программирование Flash-памяти Копировать оперативную память во Flash-память <Адрес На8Ь-памяти> <Ад- рес оперативной памяти> <Количество байтов>. Описание этой команды приве- дено в Табл. 20.14. Таблица 20.14. Команда ISP «Копировать оперативную память во Flash-память» Комацда С Вход Адрес Flash-памяти (DST): начальный адрес области Flash-памяти, куда должны быть записаны байты данных. Адрес должен лежать в 512-байтовой границе (то есть быть кратен 512). Адрес оперативной памяти (SRC): исходный адрес области оперативной памяти, откуда должны быть прочитаны байты данных. Количество байтов: количество байтов, которые будут записаны. Это значение должно быть равно 51211024140961 8192 Код возврата CMD_SUCCESS | SRC_ADDR_ERROR (Адрес не в границе слова) | DST_ADDR_ERROR (Адрес не в правильной границе) | SRCADDRNOTMAPPED DST ADDR NOT MAPPED | COUNT_ERROR (количество байтов не 5121102414096 | 8192) | SECTOR_NOT_PREPARED FOR WRITE OPERATION | BUSY| CMD LOCKED | PARAM ERROR | CODE_READ_PROTECTION_ENABLED Описание Эта команда используется, чтобы программировать Flash-память. Затрагиваемые сектора должны быть предварительно подготовлены путем вызова команды «Под- готовить сектор(-а) к операции записи». Затрагиваемые сектора автоматически за- щищаются от записи после успешного выполнения команды копирования. Загру- зочный сектор не может быть записан этой командой. С загрузчиком версии 1.61 и выше эта команды блокирована, когда разрешена защита кода от чтения Пример использования «С 0 1073774592 512 <CR> <LF>» копирует 512 байтов из оперативной памяти, на- чиная с адреса 0, во Flash-память, начиная с адреса 0x4000 8000 Переход <Адрес> <Режим>. Описание этой команды приведено в Табл. 20.15. Таблица 20.15. Команда ISP «Переход» Комацда G Вход Адрес: адрес Flash-памяти или оперативной памяти, с которого должно быть нача- то выполнение программного кода. Этот адрес должен находиться в границах сло- ва (32 бита). Режим: Т (выполнение программы в режиме THUMB) | А (выполнение программы в режиме ARM) Код возврата CMDSUCCESS | ADDR ERROR | ADDR NOT MAPPED | CMD LOCKED”! PARAM ERROR, - CODE_READ_PROTECTION_ENABLED Описание Эта команда используется, чтобы выполнить программу, постоянно находящуюся в оперативной памяти или Flash-памяти. После ее успешного выполнения, управление не обязательно возвратится к обработчику команд ISP. Обработчик команд ISP вновь получает управление, если выполненный код закончился командой возврата. С за- грузчиком версии 1.61 и выше эта команды блокирована, когда разрешена защита ко- да от чтения. Пример использования «G 0 A <CR> <LF>» выполняет передачу управления на адрес 0x0000 0000 в режи- ме ARM
20.9. Команды ISP 353 Стереть сектор(а) < Начальный номер сектора> < Конечный номер секторах Описание этой команды приведено в Табл. 20.16. Таблица 20.16. Команда ISP «Стереть сектор(а)» Комацда Е Вход Начальный номер сектора Конечный номер сектора: должен быть больше или равен начальному номеру сектора Код возврата CMD SUCCESS | BUSY] INVALID_SECTOR| SECTOR NOT PREPARED_FOR_WRITE_OPERATION | CMD LOCKED | PARAM_ERROR| CODE_READ_PROTECTION_ENABLED Описание Эта команда используется, чтобы стереть сектор или множество секторов встроенной Flash-памяти. Сектор начальной загрузки не может быть стерт этой командой. Для стирания одного (отдельного) сектора используются оди- наковые значения начального и конечного номеров сектора. С загрузчиком версии 1.61 и выше эта команды блокирована, когда разрешена защита кода от чтения Пример использования «Е 2 3 <CR> <LF>» стирает сектора 2 и 3 Flash-памяти Заполнить пробелами сектор(а) < Начальный номер сектора> < Конечный но- мер сектора>. Описание этой команды приведено в Табл. 20.17. Таблица 20.17. Команда ISP «Заполнить пробелами сектор(а)» Комацда I Вход Начальной номер сектора Конечный номер сектора: должен быть больше или равен начальному номеру сектора Код возврата CMD SUCCESS | SECTOR_NOT_BLANK (сопровождается кодами <Смещение первого не пус- того слова> <Содержимое не пустого слова>) | INVALID SECTORI PARAM_ERROR Описание Эта команда используется для заполнения пробелами одного или множества секторов встроенной Flash-памяти. Для заполнения пробелами одного (отде- льного) сектора используются одинаковые значения начального и конечного номеров сектора Пример использования «I 2 3 <CR> <LF>» заполняет пробелами сектора 2 и 3 Flash-памяти. Примечание. Заполнение пробелами сектора 0 всегда приводит к ошибке, так как его первые 64 байта переотображены из загрузочного сектора Flash-памяти. Читать идентификатор устройства (ID). Описание этой команды приведено в Табл. 20Л8. Таблица 20.18. Команда ISP «Читать идентификатор устройства (ID)» Комацда J Вход Нет Код возврата CMD_SUCCESS, сопровождаемый номером идентификатора устройства в ASCII-формате Описание Эта команда используется, чтобы читать номер идентификатора микроконтроллера Пример использования «J <CR> <LF>» 304
354 Глава 20. Организация и программирование Flash-памяти Читать версию загрузчика кода. Описание этой команды приведено в Табл. 20.19. Таблица 20.19. Команда ISP «Читать версию загрузчика кода» Команда К Вход Нет Код возврата CMD_SUCCESS, вслед за которым передаются 2 байта номера версии загрузчика кода в ASCII-формате. Эти байты следует интерпретировать как <Байт 1 (стар- ший) >, <БайтО (младший) > Описание Эта команда используется, чтобы прочитать номер версии загрузчика кода Пример ис- пользования «K<CR> <LF>» Сравнение <Адрес1> <Адрес2> <Количество байтов>. Описание этой коман- ды приведено в Табл. 20.20. Таблица 20.20. Команда ISP «Сравнение» Команда М Вход Адрес 1 (DST): Начальный адрес первой области Flash-памяти или оперативной памяти, где расположены предназначенные для сравнения байты. Этот адрес дол- жен лежать в границах слова (32 бита). Адрес2 (SRC): Начальный адрес второй области Flash-памяти или оперативной памяти, где расположены предназначенные для сравнения байты. Этот адрес дол- жен лежать в границах слова (32 бита). Количество байтов: Количество байтов, которые будут сравниваться в каждой из областей памяти. Это количество должно быть кратно 4 Код возврата CMD_SUCCESS | (Данные источника и адресата совпадают) COMPARE_ERROR | (Сопровождается смещением первого несоответствия) COUNT_ERROR (Количество байтов не кратно 4) | ADDR_ERROR| ADDR_NOTMAPPED | PARAM_ERROR Описание Эта команда используется, чтобы сравнить содержимое памяти в двух областях Пример использования «М 8192 1073741824 4 <CR> <LF>» сравниваются 4 байта из оперативной памяти с адреса 0x4000 0000 и 4 байта из Flash-памяти с адреса 0x2000. Примечание. Результат сравнения окажется некорректым, если источник или адре- сат содержат любой из первых 64 байтов, расположенных с нулевого адреса. Эти 64 байта переотображены из загрузочного сектора Flash-памяти. Полный перечень всех кодов возврата ISP с описанием обстоятельств, при которых обработчик команд ISP возвращает код, приведен в Табл. 20.21. Таблица 20.21. Перечень кодов возврата ISP Код возврата Мнемоника Описание 0 CMD_SUCCESS Команда выполнена успешно. По- сылается обработчиком команд ISP, когда команда, данная хостом, пол- ностью и успешно выполнена 1 INVALID-COMMAND Недействительная (некорректная) команда
20.10. Команды IAP 355 Таблица 20.21. Перечень кодов возврата ISP (продолжение) Код возврата Мнемоника Описание 2 SRC_ADDR_ERROR Адреса источника не лежат в грани- цах слова 3 DST_ADDR_ERROR Адреса приемника не лежат в пра- вильных границах 4 SRC_ADDR_NOT_MAPPED Адрес источника не отображен в карте памяти 5 DST_ADDR_NOT_MAPPED Адрес приемника не отображен в карте памяти 6 COUNT_ERROR Количество байтов не кратно 4 или равно неразрешенному значению 7 INVALID-SECTOR Некорректный номер сектора или конечный номер сектора больше начального номера сектора 8 SECTOR-NOT-BLANK Сектор не заполнен пробелами 9 SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION Команда подготовки сектора к опе- рации записи не была выполнена 10 COMPARE_ERROR Данные источника и адресата не равны 11 BUSY Аппаратный интерфейс програм- мирования Flash-памяти занят 12 PARAM_ERROR Недостаточное количество пара- метров или некорректный параметр 13 ADDR.ERROR Адреса не лежат в границах слова 14 ADDR_NOT_MAPPED Адрес не отображен в карте памяти 15 CMD_LOCKED Команда заблокирована 16 INVALID-CODE Недействительный код 17 INVALID_BAUD_RATE Некорректная установка скорости обмена 18 INVALID_STOP_BIT Некорректная установка стопового бита 19 CODE_READ_PROTECTION_ENABLED Разрешена защита кода от чтения. Данный код возврата доступен с загрузчиком версии 1.61 и выше 20.10. Команды IAP Обработчик команд IAP оперирует командами, перечисленными в Табл. 20.22. Порядок вызова команды (подпрограммы) IAP в пользовательском приложении следующий: непосредственно перед обращением к той или иной команде IAP, в регистр гО необходимо поместить значение, задающее адрес, на- чиная с которого в ОЗУ хранятся параметры этой команды IAP (от 0 до 5 пара- метров). Значения этих параметров также необходимо заранее записать в ОЗУ. Результат выполнения команды IAP возвращается в таблице результатов, на ко- торую указывает значение регистра г1. Пользовательская программа может многократно использовать таблицу результатов для той или иной команды, пе-
356 Глава 20. Организация и программирование Flash-памяти редавая один и тот же указатель в регистрах гО и г1. Таблица параметров должна быть достаточно большой, чтобы содержать все результаты в случае, когда ко- личество результатов превышает количество параметров. Передача параметров иллюстрируется блок-схемой, изображенной на Рис. 20.4. Количество парамет- ров и результатов меняется, в зависимости от команды IAP. Максимальное ко- личество параметров, равное 5, передается в команде «Копировать оператив- ную память во Flash-память». Максимальное количество результатов, равное 2, возвращается командой «Заполнить сектор(-а) пробелами». Обработчик коман- ды возвращает код состояния INVALID-COMMAND, когда получена неопре- деленная команда. Подпрограмма IAP постоянно находится по адресу 0x7FFFFFF0 (код для режима THUMB). Таблица 20.22. Перечень команд IAP Команда IAP Код команды Описание Подготовить сектор(-а) к операции записи 50 Табл. 20.23 Копировать оперативную память во Flash-память 51 Табл. 20.24 Стереть сектор(-а) 52 Табл. 20.25 Заполнить пробелами сектор(-а) 53 Табл. 20.26 Читать идентификатор устройства (ID) 54 Табл. 20.27 Читать версию загрузчика кода 55 Табл. 20.28 Сравнение 56 Табл. 20.29 Таблица параметров команд Таблица результатов команд Рис. 20.4. Блок-схема передачи параметров и возвращения результатов команд IAP При написании управляющей программы на языке С функцию IAP можно вызвать следующим образом: 1. Определить точку входа в IAP. Для режима THUMB, определение точки вхо- да будет выглядеть так: #define IAP_LOCATION 0x7ffffffl 2. Определить структуру данных или указателей, чтобы передать таблицу ко- манд IAP и таблицу результатов функции IAP:
20.10. Команды IAP 357 unsigned long command[5]; unsigned long result[2]; ИЛИ unsigned long * command; unsigned long * result; command=(unsigned long *) Ox.. result^ (unsigned long *) Ox.. 3. Определить указатель типа функции, который передает два параметра и не возвращает ни одного. Обратите внимание, что IAP возвращает результат в таблице, базовый адрес которого постоянно находится в г1. typedef void (*IAP)(unsigned int [],unsigned int[]); IAP iap_entry; 4. Установить указатель функции: iap_entry=(IAP) IAP_LOCATION; 5. Всякий раз, когда требуется вызвать IAP, можно использовать следующую инструкцию: iap_entry (command, result); 6. Вызов IAP может быть еще более упрощен, если использовать файл опреде- ления символов, поддерживаемый компоновщиком (линковщиком) ARM. Можно также вызывать подпрограмму IAP с использованием ассемблерного кода. Чтобы связать подпрограмму IAP и пользовательское приложение можно использовать следующие определения символов: #<SYMDEFS># ARM Linker, ADS1.2 [Build 826]: Last Updated: Wed May 08 16:12 :23 2002 0x7fffff90 T rm_init_entry 0x7fffffa0 A rm_undef„handler 0x7fffffb0 A rm_prefetchabort_handler 0x7fffffc0 A rm_dataabort_handler 0x7fffffd0 A rm_irqhandler 0x7fffffe0 A rm_irqhandler2 0x7ffffff0 T iap_entry Согласно спецификации ARM («The ARM THUMB Procedure Call Standard SWS ESPC 0002 А-05»), в регистрах rO, rl, r2 и r3 может быть передано до 4 пара- метров. Дополнительные параметры передаются в стеке. В регистрах в rO, rl, г2 и гЗ может быть возвращено до 4 параметров. Дополнительные параметры воз- вращаются косвенно через память. Часть вызовов IAP требует более 4 парамет- ров. Предложенная схема передачи параметров уменьшает риск, связанный с различием используемых компиляторов С. Flash-память недоступна в ходе операций стирания или записи. Команды IAP, в результате которых производятся операции записи/стирания Flash-памя- ти, используют для их выполнения 32 байта в верхней части адресного про- странства встроенной оперативной памяти. Пользовательская программа не должна использовать эту область, если в приложении разрешается программи- рование Flash-памяти средствами IAP.
358 Глава 20. Организация и программирование Flash-памяти Ниже подробно описывается каждая из команд IAP. Подготовить сектор(а) к операции записи. Эта команда производит операцию «запись/стирание» Flash-памяти за два шага. Описание этой команды приведено в Табл. 20.23. Таблица 20.23. Команда IAP «Подготовить сектор(а) к операции записи» Команда Подготовить сектор(а) к операции записи Вход Код команды: 50 Параметр 0: Начальный номер сектора. Параметр 1: Конечный номер сектора: должен быть больше или равен начальному номеру сектора Код состояния CMD SUCCESS | BUSY] INVALID_SECTOR| Результат Нет Описание Эта команда должна быть выполнена перед выполнением команды «Копировать оперативную память во Flash-память» или «Стереть сектор(-а)», чтобы снять с со- ответствующего сектора (секторов) защиту от записи. После успешного выполне- ния команды «Копировать оперативную память во Flash-память» или «Стереть сектор(-а)», соответствующие сектор(-а) будут снова защищены от записи. Загру- зочный сектор не может быть подготовлен к записи этой командой. Для подготов- ки к записи одного (отдельного) сектора используются одинаковые значения на- чального и конечного номеров сектора Копировать оперативную память во Flash-память. Описание этой команды приведено в Табл. 20.24. Таблица 20.24. Команда IAP «Копировать оперативную память во Flash-память» Команда Копировать оперативную память во Flash-память Вход Код команды: 51 Параметр 0 (DST): начальный адрес области Flash-памяти (адресата), в которую должны быть записаны байты данных. Адрес должен лежать в 512-байтовой грани- це (т. е. быть кратным 512). Параметр 1 (SRC): начальный адрес области оперативной памяти (источника), от- куда должны быть прочитаны байты данных. Этот адрес должен лежать в границах слова (32 бита). Параметр 2: количество байтов, которые будут записаны. Это значение должно быть равно 51211024140961 8192. Параметр 3: системная тактовая частота (CCLK) в кГц Код состояния CMD_SUCCESS | SRC_ADDR_ERROR (Адрес не в границе слова) | DST_ADDR_ERROR (Адрес не в правильной границе) | SRC_ADDR_NOT_MAPPED DST ADDR_NOT MAPPED] COUNT_ERROR (количество байтов не 51211024140961 8192) | SECTOR NOT_PREPARED FOR WRITE_OPERATION | BUSY Результат Нет Описание Эта команда используется, чтобы программировать Flash-память. Задействованные сектора должны быть предварительно подготовлены путем вызова команды «Под- готовить сектор(-а) к операции записи». Задействованные сектора автоматически защищаются от записи после успешного выполнения команды копирования. За- грузочный сектор не может быть записан этой командой
20.10. Команды IAP 359 Стереть сектор(а). Описание этой команды приведено в Табл. 20.25. Таблица 20.25. Команда IAP «Стереть сектор(а)» Команда Стереть сектор(а) Вход Код команды: 52 Параметр 0: начальный номер сектора Параметр 1: конечный номер сектора: должен быть больше или равен начальному но- меру сектора. Параметр 2: системная тактовая частота (CCLK) в кГц Код состояния CMD SUCCESS | BUSY] SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION| INVALID_SECTOR Результат Нет Описание Эта команда используется, чтобы стереть сектор или множество секторов встроенной Flash-памяти. Сектор начальной загрузки не может быть стерт этой командой. Для стирания одного (отдельного) сектора используются одинаковые значения начального и конечного номеров сектора Заполнить пробелами сектор(а). Описание этой команды приведено в Табл. 20.26. Таблица 20.26. Команда IAP «Заполнить пробелами сектор(а)» Команда Заполнить пробелами сектор(а) Вход Код команды: 53 Параметр 0: начальный номер сектора Параметр 1: конечный номер сектора: должен быть больше или равен начальному но- меру сектора Код состояния CMD SUCCESS | BUSY] SECTOR_NOT_BLANK | INVALID_SECTOR Результат Результат 0: Смещение первого не пустого слова, если код состояния — SECTOR_NOT_BLANK. Результат 1: Содержимое не пустого слова Описание Эта команда используется для заполнения пробелами одного или множества секторов встроенной Flash-памяти. Для заполнения пробелами одного (отдельного) сектора ис- пользуются одинаковые значения начального и конечного номеров сектора Читать идентификатор устройства (ID). Описание этой команды приведено в Табл. 20.27. Таблица 20.27. Команда IAP «Читать идентификатор устройства (ID)» Команда Читать идентификатор устройства (ID) Вход Код команды: 54 Параметры: нет Код состояния CMD_SUCCESS Результат Результат 0: номер идентификатора устройства. Описание Эта команда используется, чтобы читать номер идентификатора микроконтроллера
360 Глава 20. Организация и программирование Flash-памяти Читать версию загрузчика кода. Описание этой команды приведено в Табл. 20.28. Таблица 20.28. Команда IAP «Читать версию загрузчика кода» Команда Читать версию загрузчика кода Вход Код команды: 55 Параметры: нет Код состояния CMD_SUCCESS Результат Результат 0:2 байта номера версии загрузчика кода. Эти байты следует интерпре- тировать как <Байт 1 (старший) >, <Байт0 (младший) > Описание Эта команда используется, чтобы читать номер версии загрузчика кода Сравнение. Описание этой команды приведено в Табл. 20.29. Таблица 20.29. Команда IAP «Сравнение» Команда Сравнение Вход Код команды: 56 Параметр 0 (DST): Начальный адрес второй области Flash-памяти или оператив- ной памяти, где расположены предназначенные для сравнения байты. Этот ад- рес должен лежать в границах слова (32 бита). Параметр 1 (SRC): Начальный адрес первой области Flash-памяти или оператив- ной памяти, где расположены предназначенные для сравнения байты. Этот ад- рес должен лежать в границах слова (32 бита). Параметр 2: Количество байтов, которые будут сравниваться в каждой из облас- тей памяти. Это количество должно быть кратно 4 Код состояния CMD_SUCCESS | COMPARE_ERROR | COUNT_ERROR (Количество байтов не кратно 4) | ADDR_ERROR| ADDR_NOT_MAPPED Результат Результат 0: Смещение первого несоответствия, если код состояния — COMPARE_ERROR Описание Эта команда используется, чтобы сравнить содержимое памяти в двух областях. Результатом ее является величина в адресном пространстве памяти, на которую адрес первого же не совпадающего при таком сравнении байта (при этом гене- рируется код состояния COMPARE_ERROR) смещен относительно начального адреса любой из сравниваемых областей (хотя начальные адреса этих областей памяти отличаются друг от друга, величина смещения будет, очевидно, одна и та же). Примечание. Результат сравнения окажется некорректым, если источник или ад- ресат содержат любой из первых 64 байтов, расположенных с нулевого адреса. Эти 64 байта переотображены из загрузочного сектора Flash-памяти. Полный перечень всех кодов состояния IAP с описанием обстоятельств, при которых обработчик команд IAP возвращает код, приведен в Табл. 20.30.
20.11. Интерфейс JTAG программирования Flash-памяти 361 Таблица 20,30, Перечень кодов возврата (состояния) IAP Код возврата (состояния) Мнемоника Описание 0 CMD_SUCCESS Команда выполнена успешно. Посылается обработчиком ко- манд ISP, когда команда, данная хостом, полностью и успешно выполнена 1 INVALID-COMMAND Недействительная (некоррект- ная) команда 2 SRC_ADDR_ERROR Адреса источника не лежат в границах слова 3 DST_ADDR_ERROR Адреса приемника не лежат в правильных границах 4 SRC_ADDR_NOT_MAPPED Адрес источника не отображен в карте памяти 5 DST_ADDR_NOT_MAPPED Адрес приемника не отображен в карте памяти 6 COUNT_ERROR Количество байтов не кратно 4 или равно неразрешенному значению 7 INVALID-SECTOR Некорректный номер сектора 8 SECTOR_NOT_BLANK Сектор не заполнен пробелами 9 SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION Команда подготовки сектора к операции записи не была выполнена 10 COMPARE_ERROR Данные источника и адресата не равны 11 BUSY Аппаратный интерфейс програм- мирования Flash-памяти занят 20.11. Интерфейс JTAG программирования Flash-памяти Встроенный в микроконтроллеры LPC2000 отладчик JTAG может записать данные, предназначенные для записи во Flash-память, в оперативную память, а затем вызвать функцию IAP «Копировать оперативную память во Flash-па- мять». Запись во Flash-память с помощью JTAG можно производить много- кратно и с требуемым смещением. Использование отладчика JTAG для про- граммирования Flash-памяти будет подробнее рассмотрено во второй части этой книги.
ГЛАВА 21 МОДУЛЬ ЦАП (DAC) Встроенный модуль ЦАП микроконтроллеров семейства LPC2000 имеет следующие особенности: • цифро-аналоговый преобразователь на 10 бит; • архитектура коммутируемой резистивной матрицы; • буферизированный выход; • режим Power Down; • скорость преобразования выбирается в зависимости от потребляемой мощности. 21.1. Описание выводов ЦАП Описание выводов модуля ЦАП микроконтроллеров LPC2000 приведено в Т^бл. 21.1. Таблица 21.1. Описание выводов модуля ЦАП Название вывода Тип Описание Аоит Выход Аналоговый выход. По истечении выбранного времени установления, после того, как в регистр DACR записано новое значение, напряжение на этом выводе (относительно KSSA) становится равным величине: (VALUE / 1024) х KRef, гДе VALUE — битовое поле в регистре DACR Vref Линия опорно- го напряжения Опорное напряжение. Этот вывод связан с сигналами опорного напря- жения обоих ЦАП Vdda> VSSA Линии питания Аналоговое напряжение питания и аналоговая земля. Хотя напряжения на этих выводах номинально равны, соответственно, напряжениям KDD и Kss, но должны быть гальванически развазаны от последних в целях минимизации шумов и ошибок преобразования 21.2. Описание регистров ЦАП Модуль ЦАП микроконтроллеров семейства LPC2000 обслуживается толь- ко одним специальным регистром — регистром DACR. Регистр A/D-конвертера (DACR — ОхЕООбСООО). Битовая структура регистра DACR приведена в Табл. 21.2. Этот регистр, доступный для чтения и записи, со- держит цифровое значение, которое будет преобразовано в аналоговое напря- жение, а также бит, который задает время установления ЦАП, зависящее от потребляемой мощности. Биты 5:0 этого регистра зарезервированы для моду- лей ЦАП с более высоким разрешением, которые будут предлагаться произво- дителем в перспективе.
21.3. Операции ЦАП 363 Таблица 21.2. Биты регистра D/A-конвертера (DACR — ОхЕООбСООО) Биты регистра DACR Название Описание Значение после сброса 5:0 Зарезер- вированы Пользовательское программное обеспечение не должно произво- дить запись в зарезервированные биты. Чтение зарезервированно- го бита возвращает неопределенное значение 0 15:6 VALUE По истечении выбранного времени установления, после того, как в регистр DACR записано новое значение, напряжение на этом вы- воде (относительно KSSA) становится равным величине: (VALUE/1024)-Kref 0 16 BIAS Если этот бит сброшен в 0, то время установления ЦАП составляет максимум 1 мкс, а максимальный ток потребления ЦАП составля- ет 700 мкА. Если этот бит установлен в 1, то время установления ЦАП составляет 2.5 мкс, а максимальный ток потребления состав- ляет 350 мкА 0 31:17 Зарезер- вированы Пользовательское программное обеспечение не должно произво- дить запись в зарезервированные биты. Чтение зарезервированно- го бита возвращает неопределенное значение 0 21.3. Операции ЦАП Модуль ЦАП получает управление выводом P0.25/AD0.4/Aout, когда значе- ние битов 19:18 специального регистра PINSEL1 равно 10b (см. главу 8 «Блок коммутации выводов»). При этом, модуль ЦАП включен и активен. У микро- контроллеров, не имеющих встроенного модуля ЦАП, значение 10b указанных битов является зарезервированным. Значения времени установления ЦАП, указанные в описании бита BIAS (см. Табл. 21.2), справедливы, если входной импеданс нагрузки, подключенной к выходу Аоит>пРевышает определенную величину. Меньшая величина входного импеданса нагрузки приведет к увели- чению времени установления.
ГЛАВА 22 ВСТРОЕННЫЕ ЛОГИЧЕСКИЕ СХЕМЫ ОТЛАДКИ (ICE) Микроконтроллеры семейства LPC2000 имеют в своем составе аппаратный модуль логических схем отладки ICE, включающий в себя программный отлад- чик со следующими особенностями: • программному отладчику не требуется никаких системных ресурсов, что- бы запустить сеанс отладки; • программный отладчик позволяет взаимодействовать непосредственно с процессорным ядром через порт JTAG; • команды «внедряются» непосредственно в ядро ARM7TDMI-S; • состояние ядра ARM7TDMI-S или состояние системы может быть иссле- довано, сохранено или изменено, в зависимости от типа «внедренной» команды; • программный отладчик позволяет ускорять медленно выполняющиеся при отладке команды с целью более быстрого выполнения на системной скорости. Встроенная ICE-логика обеспечивает поддержку отладки непосредственно «на кристалле». Отладка пользовательской системы требует запуска програмы- отладчика в хосте и наличия конвертера протокола ICE. Конвертер протокола ICE преобразует команды удаленного отладочного протокола в данные JTAG, которые, в свою очередь, обращаются к ядру ARM7TDMI-S пользовательской системы. Блок-схема среды отладки приведена на Рис. 22.1. Рис, 22,1, Блок-схема среды отладки, использующей ICE
22.1. Описание ICE 365 22.1. Описание ICE Отладочная архитектура ARM7TDMI-S использует встроенный порт JTAG1) в качестве инструмента обращения к ядру. Цепи сканирования (про- смотра) подключены к ядру для заводского тестирования, они же используют- ся в режиме отладки, чтобы фиксировать информацию на шине данных и вставлять новую информацию в ядро или в память. В ARM7TDMI-S имеются две цепи просмотра, относящиеся к JTAG. Управляет этими цепями тестовый контроллер порта доступа, также относящийся к JTAG. В дополнение к цепям просмотра, архитектура отладки использует встроенную ICE-логику, которая интегрирована на кристалле микроконтроллера совместно с ядром ARM7TDMI-S. Встроенная ICE-логика имеет собственную цепь просмотра, которая используется, чтобы вставлять сторожевые и контрольные точки в яд- ро ARM7TDMI-S. Встроенная ICE-логика состоит из двух регистров стороже- вых точек реального времени и регистра состояния и управления. Один или оба регистра сторожевых точек могут быть запрограммированы, чтобы остано- вить ядро ARM7TDMI-S. Выполнение программы ядром приостанавливается, когда наступает ра- венство между значениями, запрограммированными встроенной 1СЕ-логикой и текущими значениями адресной шины, шины данных и некоторых сигналов управления. Любой бит адреса, данных или сигнала управления может быть за- маскирован таким образом, чтобы его значение не участвовало в сравнении. Любой регистр сторожевой точки может быть сконфигурирован для создания сторожевой точки (при доступе к данным) или контрольной точки останова (при вызове команды). Сторожевые и контрольные точки могут быть объедине- ны, в связи с чем: • состояния срабатывания для обеих сторожевых точек должны наступить прежде, чем ядро ARM7TDMI будет остановлено. Функция CHAIN тре- бует наступления двух таких состояний, которые будут обработаны перед остановкой ядра. Например, можно установить первую контрольную точку на защелке (триггере) доступа к периферийному устройству, а вто- рую вызывать на фрагменте программного кода, который исполняет пе- реключение задач. Поэтому, когда контрольные точки «защелкивают» информацию, на которую настроены, следует обеспечить готовность к ее идентификации; • сторожевые точки могут быть сконфигурированы так, чтобы сторожевую точку активизировал диапазон адресов. Функция RANGE позволяет комбинировать контрольные точки таким образом, что контрольная точ- ка «срабатывает», если доступ происходит в область размером 256 байт памяти (но не 32 байта). Ядро ARM7TDMI-S имеет встроенный модуль отладочного канала связи (Debug* Communication Channel). Отладочный канал связи позволяет в выпол- няющейся программе связаться с хостом отладчика или другим хостом без оста- новки программы или даже установить состояние отладки. К отладочному ка- налу связи обращение производится как к сопроцессору 14 программой, вы- полняющейся ядром ARM7TDMI-S. Отладочный канал связи позволяет ° Для получения дополнительной информации рекомендуется обратиться к стандарту «IEEE Standard 1149.1 - 1990 Standard Test Access Port and Boundary Scan Architecture». (Прим, авт.)
366 Глава 22. Встроенные логические схемы отладки (ICE) использовать порт JTAG для того, чтобы передавать и получать данные, не за- трагивая нормальный процесс выполнения программы. Данные отладочного канала связи и регистров управления отображены на адресное пространство встроенной 1СЕ-логики. 22.2. Описание выводов ICE Выводы микроконтроллера, используемые встроенной ICE-логикой, пере- числены в Табл. 22.1. Таблица 22.1. Выводы микроконтроллера, используемые встроенной ICE-логикой Название вывода Тйп вывода Описание TMS Вход Выбор тестового режима. Сигнал на выводе TMS выбирает следующее состо- яние в конечном автомате ТАР ТСК Вход Тестовая синхронизация. Этот сигнал позволяет сдвигать (защелкивать в сдвиговом регистре) входные данные на входах TMS и TDL Сигнал пред- ставляет собой тактовые импульсы, по фронту которых защелкивается сиг- нал TMS. Сигнал ТСК также определяет внутреннее состояние устройства TDI Вход Тестовый вход данных. Это вход последовательных данных для сдвигового регистра TDO Выход Тестовый выход данных. Это выход последовательный данных из сдвигового регистра. Данные выводятся из микроконтроллера по спаду сигнала ТСК nTRST Вход Тестовый сброс. Вывод nTRST может использоваться, чтобы произвести сброс тестовых логических схем, входящих в состав встроенной 1СЕ-логики RTCK Выход Возвращаемая тестовая синхронизация. Дополнительный сигнал, который добавлен к порту JTAG. Требуется для проектов, основанных на процессор- ном ядре ARM7TDMI-S. Система Multi-ICE (Система разработки программ ARM) использует этот сигнал для обслуживания синхронизации в случае, если частота синхронизации изменяется. Для получения более подробной информации об этом, рекомендуется обратиться к «Multi-ICE System Design considerations Application Note 72 (ARM DAI 0072A)» 22.2.1. Состояние мультиплексированных выводов JTAG при сбросе В микроконтроллерах LPC2000 линии порта JTAG мультиплексированы на выводах с линиями Р1.31...26. Для их подготовки к работе в качестве линий порта отладки, следует подключить резистор смещения сопротивлением 4.7 кОм между выводами Vss и P1.26/RTCK. К остальным линиям резисторы смещения подключать не нужно, а следует сконфигурировать их как выводы порта GPIO. Необходимо также обеспечить, чтобы внешние цепи, подключен- ные к выводу P1.26/RTCK5 в момент сброса находились в высокоимпенданс- ном состоянии или имели на выходе ВЫСОКИЙ логический уровень. 22.3. Описание регистров ICE Встроенная ICE логика содержит 16 регистров, представленных в Табл. 22.2. Архитектура отладочных цепей и методика отладки ARM7TDMI-S подробно описаны в руководстве «ARM7TDMI-S (rev 4) Technical Reference Manual» (ARM DDI0234A), электронная версия которого доступна на сайте www.arm.com.
22.3, Описание регистров ICE 367 Таблица 22.2. Регистры встроенной 1СЕ-логики Название Размер [бит] Описание Адрес (бинарный) Debug Control 6 Перевод в состояние отладки, отключение пре- рываний 00000 Debug Status 5 Состояние отладки 00001 Debug Comms Control Register 32 Регистр управления передачей команд отладки 00100 Debug Comms Data Register 32 Регистр управления передачей данных отладки 00101 Watchpoint 0 Address Value 32 Содержит значение адреса сторожевой точки 0 01000 Watchpoint 0 Address Mask 32 Содержит значение маски адреса сторожевой точки 0 01001 Whtchpoint 0 Data Value 32 Содержит значение данных сторожевой точки 0 01010 Wktchpoint 0 Data Mask 32 Содержит значение маски данных сторожевой точки 0 01011 Wktchpoint 0 Control Value 9 Содержит значение сигналов управления сторо- жевой точки 0 01100 Watchpoint 0 Control Mask 8 Содержит значение маски сигналов управления сторожевой точки 0 01101 Wktchpoint 1 Address Value 32 Содержит значение адреса сторожевой точки 1 10000 Watchpoint 1 Address Mask 32 Содержит значение маски адреса сторожевой точки 1 10001 Wktchpoint 1 Data Value 32 Содержит значение данных сторожевой точки 1 10010 Wktchpoint 1 Data Mask 32 Содержит значение маски данных сторожевой точки 1 10011 Watchpoint 1 Control Value 9 Содержит значение сигналов управления сторо- жевой точки 1 10100 Watchpoint 1 Control Mask 8 Содержит значение маски сигналов управления сторожевой точки 1 10101
ГЛАВА 23 ВСТРОЕННАЯ МАКРОЯЧЕЙКА ТРАССИРОВКИ (ЕТМ) Встроенная макроячейка трассировки ЕТМ, входящая в состав микроконт- роллеров LPC2000, обладает следующими особенностями: • отслеживаются команды, которые выполняет ядро ARM; • имеет 10-выводной интерфейс; • имеет 1 внешний вход запуска; • все регистры ЕТМ программируются через интерфейс JTAG; • не потребляет мощности, когда трассировка не используется; • поддерживает систему команд THUMB. При использовании внутренней памяти микроконтроллеров LPC2000, от- сутствует возможность отслеживать операции, производимые процессорным ядром микроконтроллера, непосредственно через выводы устройства. Однако встроенная в микроконтроллер макроячейка трассировки (ЕТМ) обеспечивает возможность трассировки (мониторинга выполняемых команд) в реальном времени процессорного ядра. ЕТМ выводит информацию о выполнении ко- манд процессором в порт трассировки. Программный отладчик позволяет кон- фигурировать ЕТМ, а использование интерфейса JTAG и дисплея дает возмож- ность представить информацию трассировки, получаемую ЕТМ, в формате, удобном для восприятия пользователем. 23.1. Описание ЕТМ ЕТМ связана непосредственно с ядром ARM, а не с системной шиной АМВА. ЕТМ сжимает информацию трассировки и выводит ее через «узкий» порт трассировки. Внешний анализатор порта трассировки (ТРА), в общем слу- чае, представляет собой персональный компьютер (PC), который под управле- нием программного отладчика фиксирует информацию трассировки. Помимо вывода информации, порт трассировки может передавать в микроконтроллер команды трассировки. Команды трассировки (или PC-трассировка) обеспечи- вают наблюдение потока выполняемых команд процессора и мониторинг всех команд, которые были выполнены. Команды трассировки значительно сжима- ются перед передачей так же, как и набор сигналов состояния, которые инди- цируют состояние конвейера от цикла к циклу. Информация трассировки генерируется путем управления ресурсами меха- низма запуска. Ресурсы механизма запуска включают в себя компараторы ад- ресов, счетчики и секвенсоры (устройства упорядочения). До того, как инфор- мация трассировки будет сжата, программный отладчик требует представле-
23.2. Конфигурация ЕТМ 369 ния статического «образа» выполняемого кода. Вследствие этого ограничения, с помощью ЕТМ не может быть отслежен автомодифицирующийся програм- мный код. Блок-схема среды отладки с использованием макроячейки ЕТМ изображе- на на Рис. 23.1. Рис. 23.1. Блок-схема среды отладки с использованием макроячейки ЕТМ 23.2. Конфигурация ЕТМ Для макроячейки ЕТМ производителем выбрана стандартная конфигура- ция, которая приведена в Табл. 23.1. Таблица 23.1. Конфигурация ЕТМ Тйп ресурса Количество1* Пары компараторов адресов 1 Компараторы данных 0 (мониторинг данных не поддерживается) Декодеры карты памяти 4 Счетчики 1 Предоставляемые секвенсоры Нет Внешние входы 2 Внешние выходы 0 Предоставляемый буфер FIFOFULL Да Глубина буфера FIFO 10 байтов Размер пакета трассировки 4/8 Для получения более подробной информации, обратитесь к документу ARM «Embedded Trace Macrocell Specification (ARM IHI0014E)». 304
370 Глава 23. Встроенная макроячейка трассировки (ЕТМ) 23.3. Описание выводов ЕТМ Описание выводов ЕТМ приведено в Табл. 23.2. Таблица 23.2. Описание выводов ЕТМ Название вывода Тип вывода Описание TRACECLK Выход Тактирование трассировки. Сигнал тактирования трассировки обеспе- чивает тактовые импульсы для порта трассировки. Сигналы PIPESTAT[2:0], TRACESYNC и TRACEPKT[3:0] синхронизированы по фронту сигнала тактирования трассировки. Этот сигнал не генерирует- ся блоком ЕТМ, а должен быть получен из системного тактового сигна- ла. Частота тактовых импульсов должна быть подобрана так, чтобы обеспечивать достаточное время задержки для сигналов данных трас- сировки. Таким образом, поддерживается половинная скорость режима тактирования. Сигналы данных трассировки сдвигаются в соответс- твии с фазой сигнала TRACECLK. Для получения дополнительной ин- формации, обратитесь к документам «ЕТМ7 Technical Reference Manual» (ARM DDI0158В) и «Embedded Trace Macrocell Specification» (ARM IHI 0014E) PIPESTAT[2:0] Выход Состояние конвейера. Сигналы состояния конвейера обеспечивают, из цикла в цикл, индикацию того, в какой стадии выполнения команды находится конвейер процессора TRACESYNC Выход Синхронизация трассировки. Сигнал синхронизации трассировки ис- пользуется, чтобы указать первый пакет группы пакетов трассировки и находится в ВЫСОКОМ уровне только для первого пакета любого ад- реса перехода TRACEPKT[3:0] Выход Пакет трассировки. Сигналы пакета трассировки используются для вы- вода упакованной информации адреса и данных, связанных с состоя- нием конвейера. Все пакеты имеют длину восемь битов. Пакет выво- дится более, чем за два цикла. В первом цикле выводятся биты пакета [3:0], а во втором цикле — биты пакета [7:4] EXTINT[0] Вход Вход внешнего запуска (триггерный вход) 23.3.1. Мультиплексированные выводы ЕТМ в состоянии сброса В микроконтроллерах LPC2000 выводы, связанные с ЕТМ, мультиплекси- рованы с линиями Р1.25... 16. Для того, чтобы использовать эти выводы в качес- тве порта трассировки, необходимо подключить резистор смещения сопротив- лением 4.7 кОм между выводом P1.20/TRACESYNC и Vss Для того, чтобы ис- пользовать эти выводы в качестве линий обычного порта, не следует подключать резистор смещения к выводу P1.20/TRACESYNC и необходимо обеспечить, чтобы внешние цепи, подключенные к P1.20/TRACESYNC, созда- вали на этом выводе ВЫСОКИЙ уровень или находились в высокоимпендас- ном состоянии во время сброса. 23.4. Описание регистров ЕТМ Блок макроячейки ЕТМ содержит 29 регистров, перечисленных в Табл. 23.3. Их подробное описание приводится в документе ARM IHI0014Е, доступном на сайте www.arm.com.
23.4. Описание регистров ЕТМ 371 Таблица 23.3. Регистры ЕТМ Название Описание Доступ Кодирование регистра Управление ЕТМ (ЕТМ Control) Управляет общими операциями ЕТМ R/W ООО 0000 Код конфигурации ЕТМ (ЕТМ Configuration Code) Позволяет отладчику читать инфор- мацию о количестве и типах каждого из ресурсов RO ООО 0001 Случай запуска (Trigger Event) Содержит средства управления для всех случаев запуска WO 000 0010 Управление декодирования карты памяти (Memory Map Decode Control) Восьмибитный регистр, используе- мый, чтобы статически конфигури- ровать декодер карты памяти WO 000 ООН Состояние ЕТМ (ЕТМ Status) Содержит бит обработки состояния переполнения RO 000 0100 Системная конфигурация (System Configuration) Содержит информацию о конфигура- ции с использованием шины SYSOPT RO 000 0101 Управление разрешением трассировки 3 (Trace Enable Control 3) Содержит адреса включения/отклю- чения трассировки WO 000 0110 Управление разрешением трассировки 2 (Trace Enable Control 2) Содержит адреса для сравнения WO 000 0111 Разрешение случая трассировки (Trace Enable Event) Содержит средства разрешения случая трассировки WO 000 1000 Управление разрешением трассировки 1 (Trace Enable Control 1) Содержит включаемые и исключае- мые области WO 000 1001 Область буфера FIFOFULL (FIFOFULL Region) Содержит включаемые и исключае- мые области WO 000 1010 Уровень FIFOFULL (FIFOFULL Level) Содержит уровень, ниже которого начинается область FIFO WO 0001011 Случай видеоданных (ViewData event) Содержит средства разрешения случая WO 000 1100 Управление видеоданными 1 (ViewData Control 1) Содержит включаемые/исключае- мые области WO 0001101 Управление видеоданными 2 (ViewData Control 2) Содержит включаемые/исключае- мые области WO 000 1110 Управление видеоданными 3 (ViewData Control 3) Содержит включаемые/исключае- мые области WO 000 1111 Адреса компаратора 1... 16 (Address Comparator 1 to 16) Содержит адреса для сравнения WO 001 хххх Адреса типа доступа 1... 16 (Address Access Type 1 to 16) Содержит тип доступа и размер WO ОЮхххх Зарезервировано — — 000 хххх Зарезервировано — — 100 хххх Значение инициализации счетчика 1...4 (Initial Counter Value 1 to 4) Содержит значение инициализации для счетчика. WO 101 ООхх Разрешение счетчика 1...4 (Counter Enable 1 to 4) Содержит средства управлением разрешением счета WO 10101ХХ Счетчик перезагрузки 1...4 (Counter reload 1 to 4) Содержит счетчик для случая перезагрузки WO 101 Юхх Значение счетчика 1...4 (Counter Value 1 to 4) Содержит текущее значение счетчика RO 101 Пхх Состояние и управление секвенсором (Sequencer State and Control) Содержит следующее состояние, ко- торое возникнет после случая запуска. — 101 ООхх Внешние выходы 1...4 (External Output 1 to 4) Содержит средства управления для каждого выхода WO ПО Юхх Зарезервировано — — 110 Пхх Зарезервировано — — 111 Оххх Зарезервировано — — 111 1ххх
ГЛАВА 24 ОТЛАДЧИК REALMONITOR Источником приведенной в этой главе информации является документ ARM «RealMonitor Target Integration Guide (ARM DUI 0142A)». Дополнитель- ную информацию о RealMonitor можно получить, обратившись к источнику «Real Time Debug for System-on-Chip», доступному на сайте www.arm.com. RealMonitor — это встроенный программный модуль с перестраиваемой конфигурацией, который позволяет производить отладку пользовательской программы в реальном времени. RealMonitor разработан фирмой ARM Inc. Для каждого конкретного микроконтроллера, RealMonitor имеет определенную программную конфигурацию, заданную во встроенной Flash-памяти микро- контроллера. RealMonitor имеет следующие особенности: • позволяет пользователю производить сессию отладки во время выполне- ния программы в системе без ее останова или сброса системы; • позволяет выполняться пользовательскому коду обработки прерываний, для которого критично время выполнения, в то время как другой пользо- вательский прикладной код отлаживается. Основное (и единственное) предназначение RealMonitor — отладка в реаль- ном времени. 24.1. Описание RealMonitor RealMonitor представляет собой «легкий» отладчик, который позволяет об- служиваться прерываниям, в то время как пользователь отлаживает основную программу своего приложения. RealMonitor связывается с хостом, используя отладочный канал связи (DCC), который имеется во встроенной 1СЕ-логике. RealMonitor имеет преимущества перед традиционными методами при от- ладке приложений в системах ARM. К традиционным методам отладки отно- сятся: • отладочный монитор в пользовательской (целевой) системе; • мульти-ICE иди другой JTAG-модуль и встроенная ICE-логика (аппарат- ный способ Отладки). Хотя оба эти метода обеспечивают устойчивость среды отладки, ни один из них не может использоваться как «легкий» монитор в реальном времени. Отла- дочный монитор в целевой системе предназначен, чтобы загружать и отлажи- вать независимые приложения, которые могут работать в различных режимах, и связывается при отладке с хостом путем использования стандартных подключе- ний (например, последовательного порта или порта стандарта Ethernet). Отла- дочный монитор должен сохранять, а затем восстанавливать полный контекст процессора, в результате чего поступившие прерывания могут быть отложены.
24.2. Компоненты RealMonitor 373 Таким образом, отладочный монитор, не может производить отладку в реаль- ном времени. Мульти-ICE — аппаратное решение отладки, которое использует модули встроенной ICE-логики, имеющейся в большинстве процессоров ARM. При выполнении задач отладки, например, доступа к памяти или регистрам процес- сора, мульти-ICE должен перевести ядро в состояние отладки. В то время как процессор находится в этом состоянии, которое может длиться миллионы цик- лов, нормальное выполнение программы приостанавливается и прерывания не могут обслуживаться. RealMonitor объединяет в себе особенности и механизмы отладочного мо- нитора и мульти-ICE. В частности, он содержит оба механизма связи мульти- ICE (DCC, использующий JTAG) и, подобно отладочному монитору, подде- рживает сохранение и восстановление контекста процессора. RealMonitor пред- варительно программируется (размещается) во встроенной Flash-памяти (в за- грузочном секторе). Когда он разрешен, пользователь может производить мо- ниторинг и отладку, в то время как приложение продолжает выполняться. 24.2. Компоненты RealMonitor Как можно видеть из Рис. 24.1, RealMonitor разбит на два функциональных компонента: 1. RMHost — этот компонент расположен между отладчиком и модулем JTAG. Входящий в состав RMHost контроллер (RealMonitor.dll) преобразует сигна- лы удаленного отладочного интерфейса (RDI) и запрашивает из отладчика через отладочный канал связи (DCC) сообщения RDI для модуля JTAG. Для получения более подробной информации относительно отладки через хост приложений с интегрированным RealMonitor, рекомендуется обратить- ся к документу «ARM RMHost User Guide» (ARM DUI0137A). 2. RMTarget — этот компонент предварительно запрограммирован (размещен) во встроенной Flash-памяти (в загрузочном секторе) и выполняется в аппа- ратных средствах целевой системы. Он использует встроенную 1СЕ-логику и связывается с хостом через DCC. Для получения более подробной информации относительно функциональ- ных возможностей RMTarget, рекомендуется обратиться к документу «RealMonitor Target Integration Guide» (ARM DUI 0142A). Puc. 24,1. Блок-схема, иллюстрирующая использование RealMonitor
374 Глава 24. Отладчик RealMonitor 24.3. Порядок работы Real Monitor В общем случае, RealMonitor работает как конечный автомат, диаграмма со- стояний которого изображена на Рис. 24.2. RealMonitor переключает состояния выполнения/останова в ответ на пакеты, получаемые из хоста, или из-за асинх- ронных событий, происходящих в целевой системе. RMTarget поддерживает вызов только одной точки останова или сторожевой (контрольной) точки, про- изводя останов или выполнение полу-хостинга^ SWI в тот же самый момент. Сохранение с последующим восстановлением контекста, при вложенных собы- тиях, не поддерживаются. Так, например, если пользовательское приложение застопорилось в одной контрольной точке, а на другую контрольную точку уп- равление было передано в обработчике запроса IRQ, то RealMonitor переходит в состояние «Паника» (см. Рис. 24.2). После перехода в это состояние никакая отладка выполняться не может. SWI (программное прерывание) Аварийное прекращение работы Неопределенная команда ' ОстановГЧ^ Состояние 1 I Состояние выполнения I I останова < ПереходХ. . SWI (программное прерывание) Аварийное прекращение работы Неопределенная команда Рис. 24.2. Диаграмма состояний RealMonitor Отладчик ARM extended Debugger (AXD) или другой выполняющийся в хосте отладчик, «осведомленный» о наличии RealMonitor, может осуществлять связь с целевой системой, чтобы посылать команды и получить данные. Связь между хостом и целевой системой иллюстрируется схемой, приведенной на Рис. 24.1. Целевой компонент RealMonitor (RMTarget) обменивается информа- цией с хостовым компонентом (RMHost), используя отладочный канал связи (DCC), данные которого передаются через интерфейс JTAG. В то время как выполняется пользовательское приложение, RMTarget, как правило, использует запросы IRQ, сгенерированные DCC. Это означает, что ес- ли пользовательское приложение также хочет использовать запросы IRQ, оно должно передать любые прерывания в RealMonitor через DCC. Чтобы обеспечивать возможность отладки без остановок, встроенная логи- ческая схема ICE-RT (ICE реального времени) генерирует исключительную си- туацию (ИС) аварийного прекращения работы выбора (команд) с упреждением, когда управление достигает точки останова, либо ИС аварийного прекращения выборки данных, когда достигается контрольная точка. Эти ИС обрабатываются обработчиками исключительных ситуаций RealMonitor, которые, используя от- ладчик, сообщают пользователю о вызвавших ИС случаях. Это позволяет пользо- вательскому приложению выполняться без остановки процессора. RealMonitor «полагает», что пользовательское приложение состоит из двух частей: 1. Приоритетное приложение, выполняющееся непрерывно, как правило, в режимах User, System или Supervisor. Под полу-хостингом здесь понимается взаимодействие кода, выполняющегося в целе- вой системе ARM, и отладчика ARM, выполняющегося в хосте. Примерами средств полу-хос- тинга являются: ввод с клавиатуры, вывод на экран и дисковый ввод/вывод. {Прим, авт.)
24.3. Порядок работы Real Monitor 375 2. Фоновое приложение, содержащее обработчики ИС и прерываний, которые вызваны ИС, а также следующими событиями в пользовательской системе: • запросы IRQ или FIQ; • аварийные прекращения работы выбора с упреждением и выборки дан- ных (Abort), вызванные пользовательским приоритетным приложением. Эти события указывают на ошибку в отлаживаемом приложении. В обоих случаях, хост уведомляется об ошибке, и пользовательское приложение останавливается; • исключительная ситуация (Undefined), вызванная неопределенными ко- мандами в пользовательском приоритетном приложении. Это событие указывает на ошибку в отлаживаемом приложении. В этом случае, RealMonitor приостанавливает выполнение пользовательского приложе- ния до тех пор, пока не получит из хоста пакет «Go» («Переход»), см. Рис. 24.2. В случае возникновения одной из вышеперечисленных исключительных ситуаций, которые не обрабатываются пользовательским приложением, проис- ходит следующее: 1. RealMonitor входит в цикл опроса DCC. Если буфер чтения DCC полон, управ- ление передается функции rm_ReceiveData() (внутренняя функция RealMonitor). Если буфер записи DCC пуст, управление передается функции rm_TransmitData() (внутренняя функция RealMonitor). Если условия вызова ни одной из функций не выполняются, то управление возвращается вызывающей программе. При опросе DCC и установлении очередности вызова вышеуказан- ных функций, чтение DCC имеет более высокий приоритет, нежели запись. 2. RealMonitor останавливает приоритетное приложение. Запросы IRQ и FIQ продолжают обслуживаться, если они были разрешены в приоритетном приложении до его остановки. 24.3.1 . Разрешение работы RealMonitor Чтобы разрешить работу RealMonitor, необходимо выполнить ициализацию стеков. Пользователь должен гарантировать, что в его приложении определены стеки для каждого из режимов процессора, используемых RealMonitor, т. е. для каждого из этих режимов RealMonitor требует задания некоторого количества слов в пространстве стека. В общем случае, пользователь должен определить под стек пространство, достаточное для совместной работы RealMonitor и свое- го приложения. Требования, предъявляемые к стеку со стороны RealMonitor, приведены в Табл. 24.1. Таблица-24.1. Требования RealMonitor к размеру области стека Режим процессора Необходимый для RealMonitor размер области стека [байт] Неопределенная команда (Undefined) 48 Аварийное прекращение работы выбора с упреждением (Prefetch Abort) 16 Аварийное прекращение выборки данных (Data Abort) 16 IRQ 8
376 Глава 24. Отладчик RealMonitor Режим IRQ. Для этого режима всегда требуется стек. RealMonitor использует 2 слова (по 4 байта) стека на входе в программу обработки прерывания. Эти 2 слова освобождаются до того, как разрешаются вложенные прерывания. Режим Undefined. Для этого режима всегда требуется стек. При обработке исключительной ситуации «неопределенная команда», RealMonitor использует 12 слов стека. Режим Supervisor (SVC). В этом режиме RealMonitor не использует стек. Режим Prefetch Abort. RealMonitor использует 4 слова на входе в программу об- работки прерывания от аварийного прекращения работы выбора с упреждением. Режим Data Abort. RealMonitor использует 4 слова на входе в программу об- работки прерывания от аварийного прекращения выборки данных. Режим User/System. В этом режиме RealMonitor не использует стек. Режим FIQ. В этом режиме RealMonitor не использует стек. 24.4. Обработка исключительных ситуаций В этом разделе описаны особенности совместного использования обработ- чиков исключительных ситуаций программным модулем RealMonitor и пользо- вательским приложением. 24.4.1. Обработка исключительных ситуаций RealMonitor Чтобы функционировать должным образом, RealMonitor должен иметь воз- можность блокировать некоторые прерывания и ИС. Диаграмма, изображен- ная на Рис. 24.3, демонстрирует, какие ИС могут потребоваться RealMonitor не- посредственно или могут быть разделены между RealMonitor и пользователь- ским приложением. Если приложение требует совместного использования ИС, то это совместное использование должна обеспечивать соответствующая функ- ция-обработчик (например, app_IRQDispatch()). В зависимости от типа исклю- чительной ситуации, этот обработчик может также: • управлять прохождением данных к подпрограмме RealMonitor (напри- мер, rmjrqhandler2 ()); • требовать ИС для приложения непосредственно (например, app_IRQHandler ()). Рис, 24,3, Исключительные ситуации, обрабатываемые RealMonitor
24.5. Пример кода с использованием RealMonitor и 377 В самом простом случае, когда приложение не имеет никаких собственных обработчиков исключительных ситуаций, приложение может поместить обра- ботчик исключительных ситуаций низкого уровня, входящий в состав RealMonitor, непосредственно в векторную таблицу процессора. Обработчик запроса IRQ должен передавать управление по адресу контроллера векторов прерываний. Самый простой способ сделать это состоит в том, чтобы записать команду перехода (<адрес>) в векторную таблицу с тем, чтобы переход произ- водился на начальный адрес встроенного в RealMonitor обработчика ИС. 24.4.2. Инициализация RMTarget Когда процессор находится в привилегированном режиме, и запросы IRQ запрещены, пользователь должен включить в последовательность команд, вы- полняемых при запуске приложения, программную строку, которая вызывает функцию rm_init_entry(). 24.5. Пример кода с использованием RealMonitor В программном фрагменте, предоставленном производителем LPC2000 и приведенном ниже, демонстрируются инициализация стека, VIC, RealMonitor и разрешение некоторых невекторизованных прерываний. IMPORT rm_init_entry IMPORT rm_prefetchabort_handler IMPORT rm_dataabort_handler IMPORT rm_irqhandler2 IMPORT rm_undef_handler IMPORT User_Entry /Точка входа пользовательского приложения. CODE32 ENTRY /Определение таблицы исключений. Инструкция компоновщику размещать код /с адреса 0x0000 0000 AREA exception_table, CODE LDR pc, Reset_Address LDR pc, Undefined_Address LDR pc, SWI_Address LDR pc, Prefetch-Address LDR pc, Abort_Address NOP /Здесь должна быть вставка пользователя, задающая действительную сигнатуру LDR pc, [pc, #-0xFF0] /Загрузка вектора IRQ от VIC LDR PC, FIQ—Address Reset_Address DCD __init /Вход в точку сброса Undefined—Address DCD rm_undef_handler / Если RealMonitor SWI-Address" DCD 0 / Пользователь может поместить здесь адрес обработчика SWI Prefetch-Address DCD rm_prefetchabort_handler ; Если инициализируем и RealMonitor Abort—Address DCD rm_dataabort_handler / Если инициализируем и RealMonitor FIQ_Address DCD 0 ; Пользователь может здесь поместить адрес обработчика FIQ AREA init_code, CODE ram_end EQU 0x4000xxxx / «Вершина» встроенной RAM. __init . I *********************************************************************
378 Глава 24. Отладчик RealMonitor ; * Установка указателей вершины стека для различных режимов процессора. ; * Стек растет вниз. . **********************************************************************/ LDR r2, =ram_end /Получаем «вершину» RAM MRS rO, CPSR /Сохранение текущего режима процессора / Инициализировать стек для режима Undefined для использования RealMonitor BIC rlz rO, #0xlf ORR rl, rlz #0xlb MSR CPSR_c, rl / Выделить 32 байта для подпрограмм программирования Flash-памяти / (Обратитесь к главе, где рассказано о программировании Flash-памяти) SUB spzr2z#0xlF / Инициализировать стек для режима Abort для использования RealMonitor BIC rlz rOz #0xlf ORR rlz rlz #0x17 MSR CPSR_cz rl / Выделить 64 байта для стека режима Undefined SUB spzr2z#0x5F / Инициализировать стек для режима IRQ для RealMonitor и Пользователя BIC rlz r0z #0xlf ORR rlz rlz #0x12 MSR CPSR_cz rl / Выделить 32 байта для стека режима Abort SUB spzr2z#0x7F /Возврат в первоначальный режим MSR CPSR_cz rO / Инициализировать стек для пользовательского приложения / Выделить 256 байтов для стека режима IQR SUB spzr2z#0xl7F / I ************************************************************************ ; * Инициализация контроллера VIC. Прерывания Rx и Тх DCC / * генерируются как невекторизованные запросы IRQ, rm_init_entry «знает» / * о VIC и разрешает прерывания DBGCommTx и DBGCommRX. / * Заданный по умолчанию векторный регистр адреса запрограммирован адресом / * невекторизованного app_irqDispatchz упомянутого в этом примере. / * Пользователь может установить здесь векторизованные запросы IRQ или FIQ. f ************************************************************************** / VICBaseAddr EQU OxFFFFFOOO /Базовый адрес VIC VICDefVectAddrOffset EQU 0x34 LDR rO, =VICBaseAddr LDR rl, =app_irqDi£patch STR rlz [rO,#VICDefVectAddrOffset] BL rm_init_entry /Инициализация RealMonitor /Разрешить прерывания FIQ и IRQ в процессоре ARM MRS rlz CPSR /Получение CPSR BIC rl, rl, #0xC0 /Разрешение IRQ и FIQ MSR CPSR—cz rl /Модификация CPSR . у********************************************************************* /* Получение адреса пользовательской точки входа.
24.6. Опции компоновки RealMonitor 379 .*********************************************************************/ LDR lr, =User_Entry MOV pc, lr ./********************************************************************* ;* Невекторизованный обработчик IRQ (app_irqDispatch) .*********************************************************************/ AREA app_irqDispatch, CODE VICVectAddrOffset EQU 0x30 app_irqDispatch ; Разрешить вложенные прерывания STMFD sp!, {rl2,rl4} PMRS rl2, spsr ;Сохранение SPSR в rl2 MSR cpsr_c,OxlF ;Повторное разрешение IRQ, перейти в режим System ; Пользователь должен вставить здесь свой код, если требуется совместно ; используемое невекторизованное прерывание. Каждый обработчик совместно ; используемого IRQ должен возвращаться к прерванной команде, используя ; следующий код. ;MSR cpsr_c, #0x52 /Запрещение IRQ, перейти в режим IRQ /MSR spsr, г12 /Восстановление SPSR из rl2 /STMFD sp!, {rO} /LDR rO, =VICBaseAddr /STR rl, [rO,#VICVectAddrOffset] / Невекторизованное IRQ закончено ,-LDMFD sp!, {rl2,rl4,r0} /Восстановление регистров /SUBS pc, rl4, #4 /Возврат на прерванную команду / пользовательское прерывание не происходит с вызовом rm_irqhandler2. Этот / обработчик «не знает», что приоритетное прерывание аппаратных средств VIC / является «трюком» rm_irqhandler2, чтобы произвести возврат STMFD sp!, {ip,pc} LDR pc, rm_irqhandler2 /rm_irqhandler2 возвращается сюда MSR cpsr_c, #0x52 /Запрещение IRQ, идти в режим IRQ MSR spsr, rl2 /Восстановление SPSR из rl2 STMFD sp!, {rO} LDR rO, =VICBaseAddr STR rl, [rO,#VICVectAddrOffset] / Невекторизованное IRQ закончено LDMFD sp!, {rl2,rl4,r0} /Восстановление регистров SUBS pc, rl4, #4 / Возврат на прерванную команду END 24.6. Опции компоновки RealMonitor RealMonitor скомпонован (запрограммирован во встроенную Flash-память микроконтроллера) со следующими опциями (установками): R^1_OPT_DATALOGGING=FALSE Эта опция разрешает или запрещает поддержку любых пакетов, пересылае- мых между целевой системой и хостом не через RealMonitor, а через сторон- ний канал. RM_OPT_STOPSTART=TRUE Эта опция разрешает или запрещает поддержку всех запусков и остановов как особенностей отладки.
380 Глава 24. Отладчик RealMonitor RM_OPT_SOFTBREAKPOINT=TRUE Эта опция разрешает или запрещает поддержку программных точек оста- нова. RM_OPT_HARDBREAKPOINT=TRUE Разрешено ядро со встроенной логикой ICE-RT. (В микроконтроллерах LPC2000 используется процессорное ядро ARM-7TDMI-S Rev 4 со встроенной логикой ICE-RT.) RM_OPT_HARDWATCHPOINT=TRUE Разрешено ядро со встроенной логикой ICE-RT. (В микроконтроллерах LPC2000 используется процессорное ядро ARM-7TDMI-S Rev 4 со встроенной логикой ICE-RT.) RM_OPT_SEMIHOSTING=FALSE Эта опция разрешает или запрещает поддержку SWI-полухостинга. Полу- хостинг обеспечивается кодом, выполняющимся в целевой системе ARM, и от- ладчиком ARM, выполняющимся в хосте. Примерами средств полухостинга яв- ляются ввод с клавиатуры, вывод на экран и дисковый ввод/вывод. RM_OPT_SAVE_FIQ_REGISTERS=TRUE Эта опция определяет, сохраняются ли регистры режима FIQ в блоке регис- тров, когда RealMonitor останавливается. RM_OPT_READBYTES=TRUE RM_OPT_WRITEBYTES=TRUE RM_OPT_READHALFWORDS=TRUE RM_OPT_WRITEHALFWORDS=TRUE RM_OPT_READWORDS=TRUE RM_OPT_WRITEWORDS=TRUE Перечисленные опции разрешают/запрещают поддержку 8/16/32-битного чтения/записи. RM_OPT_EXECUTECODE=FALSE Разрешает/запрещает поддержку выполнения кода из буфера «выполняе- мый код». Код сначала должен быть туда загружен. RM_OPT_GETPC=TRUE Эта опция разрешает или запрещает поддержку пакетов, направляемых от RealMonitor в PC. Опция полезна при профилировании кода, когда RealMonitor используется в режиме прерывания. RM_EXECUTECODE_SIZE=NA Размер буфера «выполняемый код». См. также опцию RM_OPT_EXECUTECODfe. _ RM_OPT_GATHER_STATISTICS=FALSE Эта опция разрешает или запрещает код, собирающий статистику о внут- ренних операциях RealMonitor. RM_DEBUG=FALSE Эта опция разрешает или запрещает дополнительную отладку и код, обна- руживающий ошибки в RealMonitor.
24.6. Опции компоновки RealMonitor 381 RM_OPT_BUILDIDENTIFIER=FALSE Эта опция определяет, встроен ли идентификатор компоновки в таблицу возможностей RMTarget. Таблица возможностей хранится в ROM. RM_OPT_SDM_INFO=FALSE Опция SDM дает дополнительную информацию о плате и процессоре отла- дочных инструментальных средств. RM_OPT_MEMORYMAP=FALSE Эта опция определяет, встроена ли в плату карта памяти и доступна ли она через таблицу возможностей. RM_OPT_USE_INTERRUPTS=TRUE Эта опция определяет, скомпонован ли RMTarget для режима управления прерываниями или для режима опроса. RM_FIFOSIZE=NA Эта опция определяет размер буфера FIFO в словах. CHAIN_VECTORS=FALSE Эта опция разрешает поддержку RMTarget векторных цепочек посредством pHAL. Список рекомендуемой литературы к Части 1 1. UM10161. LPC2101/02/03 User Manual. Rev. 01-11 January 2006. Philips Semiconductors. www.LPC2000.com. 2. LPC2106/2105/2104 USER MANUAL. Sep. 2003. Philips Semiconductors. www.LPC2000.com. 3. LPC2114/2124/2212/2214 USER MANUAL. Feb. 2004. Philips Semiconductors. www.LPC2000.com. 4. LPC2119/2129/2194/2292/2294 USER MANUAL. Feb. 2004. Philips Semiconductors. www.LPC2000.com. 5. LPC2131/2132/2138 User Manual. Preliminary Release. November 22, 2004. Philips Semiconductors. www.LPC2000.com. 6. UM10139. LPC214x User Manual. Rev. 01 — 15 August 2005. Philips Semiconductors, www.LPC2000.com. 7. UM10114. LPC2210/2220 User Manual. Rev. 01 — 12 October 2005. Philips Semiconductors. www.LPC2000.com. 8. LPC2212/LPC2214 16/32-bit ARM microcontrollers; 128/256 kB ISP/IAP Flash with 10-bit ADC and external memory interface. Rev. 02 — 23 December 2004 Product data. Philips Semiconductors. www.LPC2000.com. 9. LPC2290 16/32-bit ARM microcontrollers with CAN, 10-bit ADC and external memory interface. Rev. 02 — 23 December 2004 Product data. Philips Semiconductors. www.LPC2000.com. 10. ARM 7TDMI Data Sheet. Document Number: ARM DDI 0029E. Issued: August 1995. Copyright Advanced RISC Machines Ltd (ARM) 1995. www.arm.com. 11. ARM7TDMI-S Technical Reference Manual (Rev 4) Copyright © ARM Limited. ARM DDI 0234A. www.arm.com. 12. 80C51 Family Derivatives 8XC552/562 Overview. Philips Semiconductors, 1996 Aug 06, http://www.semiconductors.philips.com/acrobat/various/8XC552_562OVERVIEW_2.pdf.
ЧАСТЬ 2 РАЗРАБОТКА И ОТЛАДКА ПРИЛОЖЕНИЙ НА БАЗЕ LPC2000 В соответствии со сложившейся в настоящее время практи- кой, многие производители микроконтроллеров, в том числе и NXP, для разработки пользовательских приложений на базе своих изделий предполагают использование программных средств от сторонних производителей. Для разработки приложений на базе LPC2000, на момент на- писания этой книги, существовало несколько программных уни- фицированных пакетов и отдельных программ. Вот некоторые из них. Программная среда IAR EWARM. Широко известная унифи- цированная среда, хорошо обновляется, имеет простые правила работы, легко доступна, поддерживает наиболее распространен- ный аппаратный отладочный драйвер JTAG Wiggler. Бесплатная демоверсия доступна в режим онлайн. Программная среда pVision3 фирмы Keil software. Содер- жит собственный компилятор и адаптированный компилятор GNU GCC Tools. Поддерживает драйвер JTAG Keil ULINK. Бесплатная демоверсия доступна в режиме онлайн. Пакет ARM ADS с оболочкой Metrowerks CodeWarrior. Под- держивает простейшие адаптеры JTAG (Byteblaster). Среда ARM RealView. В настоящее время поглотила пакет ARM ADS. Не поддерживает простейшие адаптеры JTAG. Демоверсию можно получить по почте при заполнении регистрационной формы. Среда Green Hills MULTI. Поддерживает драйвер JTAG Wiggler. Демоверсию можно получить по почте. Программа MetaWare. Поддерживает драйвер JTAG Wiggler. Программа GNU GCC Tools. Представляет собой бесплатный компилятор под ОС Linux. Может запускаться под ОС Windows Microsoft. Полная версия с исходными текстами доступна онлайн. Среди вышеперечисленных программных продуктов одним из наиболее мощных и удобных, по мнению автора, является интег- рированная среда разработки-отладки IAR EWARM, описанию структуры и компонентов которой и будут посвящены последую- щие главы этой книги.
ГЛАВА 25 ИНТЕГРИРОВАННАЯ СРЕДА IDE IAR EMBEDDED WORKBENCH™ Источником приведенных ниже сведений являются материалы [1], к кото- рым рекомендуется обратиться для получения более подробной информации об IDE IAR Embedded Workbench™. Интегрированная среда разработки-отладки IDE IAR Embedded Workbench™ (IAR EWARM) представляет собой мощное средство разработки-отладки, позво- ляющее создавать законченные прикладные проекты на базе различных 8-, 16- и 32-битных микроконтроллеров, в том числе микроконтроллеров с ядрами ARM. IDE включает в себя набор инструментальных средств, интегрированных в еди- ную программу-оболочку с удобным оконным интерфейсом, работающую под Microsoft Windows. IAR Embedded Workbench™ хорошо документирована и имеет простой, интуитивно понятный пользовательский интерфейс. Демоверсия IDE IAR Embedded Workbench™ с ограниченным сроком действия компилятора C/C++ (1 месяц) доступна на сайте www.iar.com. IDE IAR Embedded Workbench™ включает в себя следующие инструмен- тальные средства: • компилятор IAR ARM C/C++, • ассемблер I AR ARM, • универсальный компоновщик IAR XLINK Linker™, • программа построения библиотек IAR XAR Library Builder™, • набор библиотек IAR XLIB Librarian™, • текстовый редактор, • менеджер проектов, • утилита построения командной строки, • отладчик языка высокого уровня IAR C-SPY Debugger™. Компилятор, ассемблер и компоновщик могут запускаться на выполнение не только из оболочки IDE, но из командной строки в случае, если есть необхо- димость использовать их как внешние инструментальные средства в уже уста- новленной проектной среде. IDE IAR Embedded Workbench поддерживает развитые функции управления проектами, дающие возможность пользователю управлять всеми проектными модулями, например, файлами исходного текста на С или C++, ассемблерны- ми файлами, подключаемыми файлами и другими связанными модулями. Фай- лы могут быть сгруппированы с различными опциями, заданными на уровне всего проекта, группы или только файла. (Перечисленные объекты называются узлами проекта.)
384 Глава 25. Интегрированная среда IDE IAR Embedded Workbench ™ Для управления проектами IDE предоставляет следующие основные средс- тва и возможности: • шаблоны для создания проектов, • иерархическое представление проекта, • браузер исходного файла с иерархическим символьным представлением, • установка опций глобально, для групп исходных файлов, или для инди- видуальных исходных файлов, • утилита Маке, которая перетранслирует, повторно ассемблирует и ком- понует файлы, когда это необходимо, • текстовые файлы проектов, • утилита Custom Build, разворачивающая стандартный инструментальный набор простым способом, • командная строка, формирующая проектный файл на входе. IDE IAR Embedded Workbench предоставляет пользователю возможность удобного управления размещением окон, произвольной организации окон в группах, произвольного изменения размеров окон. 25.1. Структура IDE Ниже будет описано, какие каталоги на жестком диске компьютера созда- ются в ходе инсталляции IDE IAR Embedded Workbench и какие типы файлов используются в пользовательских проектах, создаваемых с помощью IDE. Для уточнения системных требований и порядка инсталляции IDE рекомендуется обратиться к документам [1,2], поставляемых вместе с IDE. Следует заметить, что в разных версиях IDE IAR Embedded Workbench упомянутая информация может несколько отличаться от информации, изложенной в этой книге. 25.1.1. Структура директорий IDE В ходе инсталляции IDE IAR Embedded Workbench на жестком диске ком- пьютера создается несколько каталогов, содержащих различные типы файлов, используемых IDE. Ниже приводится описание файлов, содержащихся по умолчанию в каждом каталоге. Корневой каталог, создаваемый по умолчанию инсталляционной процеду- рой находится по пути: x:\Program Files\IAR Systems\Embedded Workbench 4.п\ директории IDE, где х — диск, на котором установлена операционная система Windows Microsoft, 4.п — номер версии IDE IAR Embedded Workbench. Путь к директориям IDE может отличаться от вышеуказанного в случае, ес- ли пользователь в процессе инсталляции выбрал иной путь. Структура директорий 1DE изображена на Рис. 25.1. В каталоге Embedded Workbench 4.п содержатся два подкаталога: ARM и common. Подкаталог common содержит подкаталоги компонентов, общих для всех программ IDE IAR Embedded Workbench™. Подкаталог common\bin содержит исполняемые файлы компонентов, общих для всех программ IDE IAR Embedded Workbench, типа IAR XLINK Linker, IAR XLIB Librarian, IARXAR Library Builder, редактор и графический пользователь- ский интерфейс. Здесь также расположен исполняемый файл IAR Embedded Workbench.
25.1. Структура IDE 385 □ FSl IAR_Systems Б Embedded_Workbench_4.0_Evaluation 3 £Э arm |Q bin S IQ config (Q doc ® £3 drivers IQ inc IQ lib ffi Q plugins ® Cl src iQ tutor В Q common (Q bin IQ config |Q doc ffi Q plugins ® ЁЭ src Puc. 25.1. Структура директорий IDE IAR EWARM Подкаталог common\config содержит файлы, используемые IAR Embedded Workbench для того, чтобы поддерживать параметры настройки IDE. Подкаталог common\doc содержит справочные файлы (readme) с дополни- тельной информацией о компонентах, общих для всех программ IAR Embedded Workbench™, типа компоновщика и библиотечных инструментальных средств. Производитель IDE рекомендует пользовательм прочитать эти файлы. Каталог также содержит интерактивную версию руководства IAR Linker and Library Tools Reference Guide в формате PDE Подкаталог common\prc содержит исходные файлы для компонентов, общих для всех программ IAR Embedded Workbench™, типа IARXLINK Linker в выход- ном формате SIMPLE. Подкаталог common\plugins содержит исполняемые файлы и файлы описа- ний для компонентов, которые могут быть загружены как сменные модули. Подкаталог ARM содержит подкаталоги, определяемые спецификой про- дуктов ARM, поддерживаемых IAR Embedded Workbench. Подкаталог arm\bin содержит исполняемые файлы для специфических ком- понентов ARM, типа компилятора ARM IAR C/C++, ARM IAR ассемблера и драйверов, IAR C-SPY ™. Подкаталог arm\config содержит файлы, используемые для разработки про- ектов, например: • шаблоны командного файла компоновщика (*.хс1), • параметры настройки «чипов» (микросхем) /*./79), • файлы описания устройства C-SPY (*.ddf), • синтаксическая требования к файлам конфигурации (*,cfg), • шаблоны для прикладных и библиотечных проектов f*.ewp), соответству- ющие им библиотечные файлы конфигурации. 304
386 Глава 25< Интегрированная среда IDE IAR Embedded Workbench ™ Подкаталог arm\doc содержит справочные файлы (readme) с дополнитель- ной информацией об инструментальных средствах ARM. Производитель IDE рекомендует прочитать эти файлы. Каталог также содержит интерактивные версии нескольких руководств по специфическим компонентам ARM в форма- те PDE Подкаталог arm\inc содержит файлы, рекомендуемые для использования в качестве подключаемых, например, файлы заголовка для стандартных библио- тек С или C++. В подкаталоге содержатся также заголовочные файлы, опреде- ляющие регистры специальных функций (SFR). Эти файлы используются ком- пилятором и ассемблером. Подкаталог arm \lib содержит предварительно подготовленные библиотеки и библиотеки файлов конфигурации, используемые компилятором. Подкаталог arm\plugins содержит исполняемые файлы и файлы описания для компонентов, которые могут быть загружены как сменные модули. Подкаталог arm \src содержит исходные файлы для некоторых библиотечных функций с перестраиваемой конфигурацией и примеры кода приложений. Этот каталог также содержит исходный код библиотек. Подкаталог arm\drivers содержит дистрибутивы драйверов JTAG-интерфей- са, которые могут быть проинсталлированы на компьютер хоста и позволяют производить отладку пользовательских проектов и загрузку пользовательских программ в память микроконтроллеров целевых пользовательских систем. Подкаталог arm\tutor содержит файлы демонстрационных обучающих про- ектов, которые могут использоваться для освоения пользователями работы с IDE. 25.1.2 . Микроконтроллеры, поддерживаемые IDE IDE IAR Embedded Workbench версии 4.30a, с которой работал автор на момент на- писания этой книги, поддерживает загрузку во Flash-память для следующих микро- контроллеров семейства LPC2000: LPC2104/05/06/19/24/29/31/32/34/36/38/42/48/94, LPC2212/14/92/94. Помимо изделий компании NXP, IAR Embedded Workbench 4.30а поддерживает загрузку во Flash-память для многих микроконтроллеров из следующих семейств: ADuC702x фирмы Analog Devices, AT91SAM7Sxx и АТ91ЕЬхх фирмы Atmel, МАС71хх фирмы Freescale, ML67Q40xx фирмы OKI, STR7xx фирмы ST, TMS470RlAxx фирмы Texas Instruments. Наряду с подде- ржкой загрузки во Flash-память, в составе IAR Embedded Workbench 4.30а име- ются заголовочные файлы определений регистров ввода/вывода для большей части микроконтроллеров из перечисленных семейств, а также для микроконт- роллеров семейства ЕР93хх фирмы Cirrus, семейства S3C24xx фирмы Samsung, микроконтроллера NS9360 фирмы NetSilicon. Этот список постоянно расширя- ется по мере выхода на рынок новых микроконтроллеров и обновления версий IAR Embedded Workbench. 25.1.3 . Типы файлов IDE Различные версии IDE IAR Embedded Workbench по умолчанию используют расширения имен файлов, приведенные в Табл. 25.1.
25.1. Структура IDE 387 Таблица 25.1. Типы файлов, используемые IDE IAR Embedded Workbench™ Расширение имени файла Тйп файла Выходной для Входной для а79 Пользовательское (целевое) приложение XLINK EPROM, C-SPYht. д. Asm Исходный текст на ассемблере Текстовый редактор Ассемблер С Исходный тест на С Текстовый редактор Компилятор Cfg Синтаксическая «окраска» файлов конфигурации Текстовый редактор IAR Embedded Workbench Срр Встроенный исходный текст C++ Текстовый редактор Компилятор d79 Пользовательское (целевое) приложение с отладочной информацией XLINK C-SPY и другие симво- лические отладчики Dbg Пользовательское (целевое) приложение с отладочной информацией XLINK С-SPY и другие симво- лические отладчики Dbgt Настройки рабочего стола отладчика C-SPY C-SPY Ddf Файл дескриптора устройства Текстовый редактор C-SPY Dep Зависимая информация IAR Embedded Workbench IAR Embedded Workbench dni Файл инициализации отладчика C-SPY C-SPY ewd Проектные параметры настройки для C-SPY IAR Embedded Workbench IAR Embedded Workbench ewp Проект IAR Embedded Workbench IAR Embedded Workbench IAR Embedded Workbench eww Файл рабочей области IAR Embedded Workbench IAR Embedded Workbench fmt Формализованная информация о ло- кальных и открытых окнах IAR Embedded Workbench IAR Embedded Workbench h Исходный файл заголовка для С/С ++ или ассемблера Текстовый редактор Компилятор или ассемб- лер ^include i Исходный файл препроцессора Компилятор Компилятор i79 Параметры настройки «чипа» ARM Текстовый редактор IAR Embedded Workbench inc Исходный файл заголовка для ассемблера Текстовый редактор Ассемблер ttinclude 1st Файл листинга Компилятор и ассемблер — mac Макроопределение C-SPY Тестовый редактор C-SPY map Файл листинга XLINK —
388 Глава 25. Интегрированная среда IDE IAR Embedded Workbench ™ Таблица 25.1. Типы файлов, используемые IDE IAR Embedded Workbench™ (продолжение) Расширение имени файла Тип файла Выходной для Входной для pbd Информация просмотра источника IAR Embedded Workbench IAR Embedded Workbench pbi Информация просмотра источника IAR Embedded Workbench IAR Embedded Workbench pew Проект IAR Embedded Workbench (старый формат проекта) IAR Embedded Workbench IAR Embedded Workbench r79 Объектный модуль Компилятор и ассемблер XLINK, XARhXLIB s79 Исходный текст на ассемблере ARM Текстовый редактор ARM IAR ассемблер wsdt Параметры настройки рабочего стола IAR Embedded Workbench IAR Embedded Workbench xcl Расширенная командная строка Тестовый редактор Ассемблер, компилятор, XLINK xlb Расширенный пакет библиотек команд Тестовый редактор XLIB Пользователь может отменить заданное по умолчанию расширение имени файла путем задания явного расширения при определении имени файла. Фай- лы с расширениями ini и dni создаются динамически, когда производится за- пуск инструментальных средств IAR Embedded Workbench. Эти файлы, содер- жащие информацию о конфигурации пользовательского проекта и другие пара- метры настройки, расположены в подкаталоге settings, содержащемся в каталоге пользовательского проекта. Примечание. Если запуск инструментальных средств IAR Embedded Workbench произво- дится из командной строки, то файл листинга, сгенерированный компоновщиком XLINK, будет по умолчанию иметь расширение 1st и, вследствие этого, может быть записан поверх файла листинга, сгенерированного компилятором. С целью избежать подобной ситуации, производитель рекомендует явно задавать имя и расширение файла листинга XLINK, напри- мер, project 1.тар. 25.2. Создание проектов приложений в IDE 25.2.1. Параметры настройки нового проекта IDE IAR Embedded Workbench позволяет создавать простые и расширенные проектные модели. При создании расширенной проектной модели, сначала со- здается рабочая область, к которой добавляются один или несколько проектов. В IDE имеются готовые шаблоны проектов как для прикладных, так и для биб- лиотечных проектов. Каждый проект может содержать иерархию из групп, в ко- торые собираются исходные файлы пользователя. Для каждого проекта может быть определена одна или несколько конфигураций компоновки. Поскольку рассмотренный ниже пример приложения является простым проектом с малым количеством файлов, для него нет необходимости в расши- ренной проектной модели.
25.2. Создание проектов приложений в IDE 389 Производитель рекомендует, чтобы при создании нового проекта пользова- тель создавал отдельный каталог, где сохранялись бы все файлы этого проекта. Прежде, чем создать проект, необходимо сначала создать рабочую область (ок- но рабочей области). 25.2.2. Создание окна рабочей области Первый шаг при создании нового проекта заключается в создании новой рабочей области. При первом запуске IAR Embedded Workbench, имеется уже готовая автоматически созданная рабочая область, которую сразу же можно ис- пользовать для проектов. Если разработчик использует эту рабочую область, то первый шаг можно игнорировать. 1. Выбрать в меню File>New и выбрать Workspace в диалоговом окне New. Примечание. Кнопка Help в этом окне обеспечивает, доступ к информации о IAR Embedded Workbench IDE. Чтобы обратиться к интерактивной справке, можно в любой мо- мент нажать клавишу F1. «Кликнуть» мышью на кнопке ОК, после чего отобразится пустое окно ра- бочей области, как показано на Рис. 25.2. Рис, 25,2, Пустое окно рабочей области до создания проекта 2. Чтобы сохранить созданную рабочую область, необходимо выбрать в ме- ню File>Save Workspace, а затем задать, где должен быть сохранен файл рабочей области, набрав его имя в поле File name и нажав кнопу Save. Рекомендуется со- хранять этот файл в каталоге projects. Файл рабочей области будет иметь расши- рение имени файла eww. Этот файл содержит перечисление всех проектов, кото-
390 Глава 25. Интегрированная среда IDE IAR Embedded Workbench ™ рые пользователь добавляет к данной рабочей области. Информация, связанная с текущим сеансом, типом и размещением окон в контрольных точках, содер- жится в файлах, создаваемых в каталоге projects\settings. Теперь можно создать сам проект и добавить его к рабочей области. Примечание. Сохранить рабочую область вышеописанным способом можно только после создания в ней нового проекта (см. ниже). 25.2.3. Создание нового проекта Создание нового проекта производится в следующей последовательности. 1. Выбрать в меню Project>Create New Project. Появившееся диалоговое ок- но Create New Project предоставляет возможность использования в качестве ос- новы нового проекта шаблон проекта, как показано на Рис. 25.3. В общем слу- чае, можно выбрать шаблон Empty project, который просто создает проект, ис- пользующий заданные по молчанию параметры настройки. Create New Project Tool chain: Project templates: ; Empty project S- asm Й- C++ Й- c Externally built executable Description: Creates an empty project. OK | Cancel Rue. 25.3. Выбор шаблона проекта 2. В поле Tool chain выбрать ARM и «кликнуть» на кнопке ОК. 3. В появившемся стандартном диалоговом окне Save As следует опреде- лить, где требуется сохранить файл проекта, например, в недавно созданном
25.2. Создание проектов приложений в IDE 391 каталоге projects. В поле File name следует напечатать имя файла проекта, на- пример, projectl и нажать на кнопку Save, чтобы завершить создание нового проекта. Проект появится в окне рабочей области, как изображено на Рис. 25.4. Рис. 25.4. Создание нового проекта По умолчанию создаются две конфигурации компоновки: отладки и вы- грузки (Debug и Release). В приведенном далее в этой главе примере будет ис- пользоваться только конфигурация отладки Debug. Конфигурация компоновки выбирается из раскрывающегося меню в верхней части окна рабочей области, как изображено на Рис. 25.5. Звездочка на имени проекта указывает, что произ- веденные изменения не были сохранены. Файл проекта с расширением имени файла еюр теперь создан в каталоге projects. Этот файл содержит информацию о параметрах настройки проекта, на- пример, .таких как вариант компоновки. '.Debut [Release| Рис. 25.5. Выбор конфигурации компоновки проекта
392 Глава 25. Интегрированная среда IDE IAR Embedded Workbench ™ 25.2.4. Добавление файлов к проекту Для иллюстрации процедуры добавления файлов к проекту используем ис- ходные файлы Tutor.c и Utilities.с. Tutor.c — простая программа, использующая только стандартные особен- ности языка С. Она инициализирует массив с десятью первыми числами Фибо- наччи и печатает результат через функцию stdout. Utilities.с — файл, содержащий сервисные подпрограммы для вычисления чисел Фибоначчи. Следует заметить, что возможность создания нескольких групп позволяет организовать исходные файлы, входящие в состав проекта, в соответствии с их содержимым или согласно потребностям пользователя. В данном проекте име- ется только два файла, поэтому нет никакой необходимости создавать группу. Добавление файлов к проекту производится в следующей последователь- ности: 1. В окне рабочей области выбирается объект, к которому планируется доба- вить исходный файл, Это может быть группа или, как в нашем случае, непос- редственно проект. 2. Выбрать в меню Project>Add Files, после чего откроется стандартное диа- логовое окно обзора файлов и каталогов. Находим с помощью этого окна фай- лы Tutor.c и Utilities.с, которые находятся в подкаталоге Embedded Workbench 4.n\arm\tutor, поочередно выбираем их в списке выбора файла и нажимаем кнопку Open. После этого выбранные файлы добавляются к проекту project!, как изображено на Рис. 25.6. Рис. 25.6. Добавление файлов к проекту
25.2. Создание проектов приложений в IDE 393 25.2.5. Задание опций проекта Для прикладных пользовательских проектов опции могут быть заданы для узлов проекта всех уровней. Сначала производится задание генеральных (об- щих) опций, например, таких как конфигурация процессора. Эти опции долж- ны быть одинаковыми для всей структуры конфигурации, поэтому они устанав- ливаются для узла уровня проекта. Задание опций проекта производится в следующей последовательности: 1. Выбирается позиция табуляции нужного проекта, например, projectl — Debug в окне рабочей области, а в меню выбирается Project>Options. После это- го откроется страница Target в категории General Options, как изображено на Рис. 25.7. На страницах General Options следует проверить установки парамет- ров настройки, приведенные в Табл. 25.2. Примечание. Вместо задания типа ядра микроконтроллера опцией Core в поле Processor variant можно непосредственно задать нужное устройство опцией Device, выбрав его из от- крывающегося списка, как изображено на Рис. 25.7. Options for node “projectl“ Category: General Options C/C++ Compiler Assembler Custom Build Build Actions Linker Debugger Simulator Angel IAR ROM-monitor J-Link Macraigor RDI Third-Party Driver Target | Output] Library Configuration | Library options | MISRAC] г Processor variant.................................................. С Core P Generate interwork code Processor mode C Arm Thumb Endian mode <• Little C Big Ill None AnalogDevices Atmel Cirrus Freescale Intel NetSilicon Oki Philips Philips LPC2104 Philips LPC2105 Philips LPC2106 Philips LPC2114 Philips LPC2119 Philips LPC2124 Philips LPC2129 Philips LPC2130 Philips LPC2131 Philips LPC2132 Philips LPC2134 Philips LPC2136 Philips LPC2138 Philips LPC2142 Philips LPC2148 Philips LPC2194 Philips LPC2212 Philips LPC2214 Philips LPC2292 Philips LPC2294 Samsung Sharp ST Texaslnstruments . -' Puc. 25.7. Задание глобальных опций проекта (выбор платформы) Таблица 25.2. Глобальные параметры настройки для проекта projectl Страница окна Параметр: значение Target Core: ARM7TDMI-S Output Output file: Executable Library Configuration Library: Normal
394 Глава 25. Интегрированная среда IDE IAR Embedded Workbench ™ После установки глобальных опций следует установить опции компилятора для проекта. Делается это следующим образом. 2. Выбрать C/C++ Compiler в списке Category с тем, чтобы отобразить стра- ницы группы опций компилятора, как показано на Рис. 25.8. Options for node "projectl" (Я] Category: [General Options C/C+* Compiler Assembler Custom Build Build Actions Linker Debugger Simulator Angel IAR ROM-monitor J-Link Macraigor RDI Third-Party Driver Factory Settings Language | Optimization | Output List | Preprocessor | Diagnostics +1 * P iQutput. list file P Assembler mnemonics Г“ Diagnostics Г~ Output assembler file OK . Cancel Puc. 25.8. Задание опций компилятора C/C++ 3. Проверить установки параметров настройки, приведенные в Табл. 25.3. 4. «Кликнуть» на кнопке ОК, чтобы установить значения, которые были вы- браны. На данном этапе, создание нового проекта можно считать законченным. Таблица 25.3. Параметры настройки компилятора C/C++ для проекта project 1 Страница окна Параметр: значение Code Optimizations, Size: None (Best debug support) Output Generate debug information List Output list file Assembler mnemonics
25.3. Компилирование и компоновка приложения 395 25.3. Компилирование и компоновка приложения После создания проекта приложения, его следует откомпилировать и ском- поновать. При этом, создается файл листинга компилятора и файл карты ком- поновщика. 25.3.1. Компилирование исходных файлов Компилирование исходных файлов производится в следующей последова- тельности: 1. Чтобы откомпилировать, например, файл Utilities.c, следует выбрать его в окне рабочей области. 2. Выбрать в меню Project>Compile. Альтернативно можно нажать на кнопку Compile в инструментальной пане- ли или выбрать команду Compile из контекстного меню, которое появляется, ес- ли щелкнуть правой кнопкой мыши на выбранном файле в окне рабочей облас- ти. Процесс и результаты компиляции будут отображаться в окне сообщений Build, как показано на Рис. 25.9. Рис. 25.9. Завершение компиляции файла проекта 3. Откомпилировать файл Tutor.c тем же самым способом. По завершении компиляции, IAR Embedded Workbench создаст новые под- каталоги в каталоге проекта. Поскольку нами используется конфигурация ком- поновки Debug, то в каталоге Debug будут созданы каталоги List, Obj и Ехе\ • каталог List — каталог хранения файлов листинга. Файлы листинга име- ют расширение 1st, • каталог Obj — каталог хранения объектных файлов компилятора и ассем- блера. Эти файлы имеют расширение г79, и в дальнейшем будут исполь- зоваться как входные для компоновщика IAR XLINK,
396 Глава 25. Интегрированная среда IDE IAR Embedded Workbench ™ • каталог Exe — каталог хранения исполняемого файла. Этот файл имеет расширение d79, и в дальнейшем будет использоваться как входной для отладчика IAR C-SPY. Следует заметить, что этот каталог будет оставать- ся пустым, пока не будет произведена компоновка объектных файлов. «Кликните» на значке «+» в окне рабочей области, чтобы полностью развер- нуть дерево файлов проекта, как изображено на Рис. 25.10. Как можно видеть, IAR Embedded Workbench в результате компиляции создал в рабочей области позицию табуляции папки Output, в которой содержатся все созданные выходные файлы. В дереве проекта отображаются также все подключаемые файлы заголовков. Рис. 25.10. Развернутое дерево файлов проекта 25.3.2. Анализ файла листинга Исследование файла листинга компилятора — важный момент в работе с проектом пользовательского приложения. Файл листинга содержит много важ- ной информации, незаменимой для анализа в ходе устранения ошибок в исход- ных файлах и при формальной отладке проекта. Кроме того, путем анализа лис- тинга можно установить, как влияет используемая степень оптимизации на раз- мер сгенерированного кода. Для исследования файла листинга нужно произвести следующие действия: 1. Открыть файл листинга Utilities.lst, дважды «кликнув» на его имени в окне рабочей области. Файл листинга состоит из следующих основных частей:
25.3. Компилирование и компоновка приложения 397 • заголовок файла — содержит информацию о версии продукта, о том, ког- да файл был создан, а также о версии командной строки опций компиля- тора, которые использовались при компиляции; • тело файла листинга — показывает код ассемблера и двоичный код, сге- нерированный из каждой ассемблерной команды, а также показывает, какие переменные назначены для различных сегментов; • конец файла листинга — показывает требуемое количество пространства памяти стека, кода и данных, а также содержит информацию об ошибках и предупреждающих сообщениях, которые, возможно, были сгенерированы. Обратите внимание на размер сгенерированного кода, указанный в конце файла листинга, и оставьте файл открытым. 2. Выбрать в меню Tools>Options, чтобы открыть диалоговое окно IDE Options, после чего выбрать в нем позицию табуляции Editor, как показано на Рис. 25.11. В этой позиции задать опцию Scan for Changed Files. Эта опция включает автоматическое обновление для любого файла, открытого в окне ре- дактора, в том числе и для файла листинга. «Кликните» на кнопке ОК. IDE Options Editor Setup Files | Editor Colors and Fonts Project | Source Code Control | Debugger Common Fonts | Key Bindings | External Editor | Messages Editor Tab size: Indent size: -Tab Key Function: —— C Insert tab <* Indent with spaces EOL characters: |PC P Syntax highlighting p Auto indent Configure... | Г Show line numbers p Scan tor changed files P Show bookmarks Г Enable virtual space p Remove trailing blanks Отмена Применить Справка Рис, 25,11, Задание настроек для исследования файла листинга 3. Выбрать файл Utilities.c в окне рабочей области. Открыть диалоговое окно C/C++ Compiler, «кликнув» правой кнопкой мыши на выбранном файле в окне рабочей области, а затем выбрав в отрывшемся меню позицию Options.... Выбе- рите позицию табуляции Optimization и задайте опцию Override inherited settings. В ставшем активным списке Optimizations выберите High (Maximum optimization). «Кликните» на кнопке ОК.
398 Глава 25. Интегрированная среда IDE IAR Embedded Workbench ™ 4. Откомпилируйте файл Utilities.c. При этом, обратите внимание на два об- стоятельства. Во-первых, автоматическое модифицирование открытого файла листинга, благодаря установленной опции Scan for Changed Files. Во-вторых, в конце файла листинга будет указан эффект влияния увеличенной степени оп- тимизации на размер сгенерированного кода. Сравните размеры кода в байтах для последнего и для предыдущего случая. 5. В рассматриваемом ниже примере будет использоваться уровень оптими- зации None, поэтому перед компоновкой приложения следует восстановить за- данный по умолчанию уровень оптимизации. Откройте диалоговое окно C/C++ Compiler, «кликнув» правой кнопкой мыши на выбранном файле в окне рабочей области, а затем выбрав в отрывшемся меню позицию Options.... Сни- мите выделение опции Override inherited settings и «кликните» на кнопке ОК. Перекомпилируйте файл Utilities.c. 25.3.3. Компоновка приложения На этом этапе работы с проектом, необходимо задать опции настройки ком- поновщика IAR XLINK Linker ™. Для этого нужно выполнить следующую пос- ледовательность действий: 1. Выбрать позицию табуляции нужного проекта, например, projectl — Debug в окне рабочей области, а затем выбирать в меню Project>Options. После этого, выбрать строку Linker в списке Category, чтобы отобразить страницы оп- ций компоновщика XLINK, как показано на Рис. 25.12. Options for node ’’projectl" Category: General Options C/C++ Compiler Assembler Custom Build Build Actions Linker Debugger Simulator Angel IAR ROM-monitor J-Link Macraigor RDI Third-Party Driver Factory Settings | Output) Extra Output | itdefine) Diagnostics List | Config] Proce +1 * 57 generatelinker listing P Segment map "Symbols---------------- C None C Symbol listing <• Module map File format ' %* Text Г HTML Г lines/page: Г Module summary Г Include suppressed entries Г Static overlay map OK | Cancel Puc. 25.12. Задание опций настройки компоновщика
25.3. Компилирование и компоновка приложения 399 Таблица 25.4. Параметры настройки XLINK для проекта project 1 Страница окна Параметр: значение Output Debug information for C-SPY With runtime control modules With I/O emulation modules List Generate linker listing Segment map Symbols: Module map 2. Задать установки параметров настройки в соответствии с Табл. 25.4. Сле- дует выбирать такой формат выходного файла компоновщика, который соот- ветствует дальнейшим целям пользователя. Если планируется загрузить выход- ной файл в отладчик, то выходной файл должен содержать информацию отлад- ки. Если планируется загрузить выходной файл в программатор PROM, то выходной файл не должен содержать информацию отладки и иметь формат Intel-hex или Motorola S-records. В рассматриваемом примере, для выходного файла мы будем использовать опцию Debug information for C-SPY с опцией With I/O emulation modules, что означает, что некоторые подпрограммы нижнего уровня будут связаны непосредственно с функциями stdin и stdout в окне Terminal I/O отладчика C-SPY Debugger. Рис. 25.13. Компоновка проекта Для анализа командного файла компоновщика можно использовать подхо- дящий текстовый редактор, например редактор, встроенный в IAR Embedded Workbench, или вывести на печать копию файла с целью проверки соответствия заданных в нем определений требованиям пользователя. В командном файле компоновщика для управления сегментами используются опции командной строки XLINK. Об этих опциях будет подробно рассказано в главе 29, посвя- щенной описанию компоновщика IAR XLINK Linker.
400 Глава 25. Интегрированная среда IDE IAR Embedded Workbench ™ Примечание. Определения командных файлов компоновщика не связаны ни с какими специфическими аппаратными средствами. Шаблоны командного файла компоновщика, ко- торыми снабжается продукт, могут быть использованы в симуляторе. В случае их применения в пользовательской целевой системе, необходимо адаптировать их к фактическому аппарат- ному построению памяти этой системы. Командные файлы компоновщика для некоторых оценочных плат находятся в src/examples. Для получения дополнительной информации о ко- мандных файлах компоновщика, рекомендуется обратиться к [3, 4]. 3. «Кликнуть» на кнопке ОК, чтобы сохранить установленные опции XLINK. Теперь можно скомпоновать объектный файл и сгенерировать код, ко- торый может быть отлажен. 4. Выбрать в меню Project>Make. Ход процесса компоновки будет отобра- жаться в сообщениях в окне компоновки (Рис. 25.13). В результате компонов- ки, будет создан файл projectl.d79, содержащий код с информацией отладки и файл карты компоновщикаprojectl.map. 25.3.4. Анализ файла карты компоновщика Файл карты projectl.map (Рис. 25.13) анализируется, чтобы видеть, какие оп- ределения сегментов и кода были помещены в память. Наибольший интерес для анализа в файле карты компоновщика представляют: • заголовок, содержащий опции, используемые для компоновки; • секция CROSS REFERENCE, показывающая адреса входа в программу; • секция RUNTIME MODEL, показывающая используемую модель атри- бутов подпрограмм; • секция MODULE МАР, показывающая файлы, которые были скомпоно- ваны. Для каждого файла в этой секции отображена информация о моду- лях, которые были загружены как часть пользовательского приложения, подключаемых сегментных и глобальных переменных и символах, объяв- ленных в пределах каждого сегмента; • секция SEGMENTS IN ADDRESS ORDER, содержащая перечисление всех сегментов, которые составляют пользовательское приложение. Название каждой из перечисленных секций указано в файле карты компо- новщика в явном виде. После всех произведенных операций, приложение projectl.d79 можно счи- тать готовым для работы в отладчике IAR C-SPY Debugger. О работе отладчика и процессе отладки будет рассказано ниже. 25.4. Отладка приложения в режиме симуляции Встроенный в IDE EWARM отладчик IAR C-SPY Debugger является отлад- чиком языка высокого уровня. Он предназначен для использования с компиля- тором ARM IAR C/C++ Compiler и с ассемблером ARM IAR Assembler и полно- стью интегрирован в' IAR IDE, обеспечивая одновременную разработку и от- ладку пользовательского приложения. При запуске C-SPY Debugger, все окна, открытые в этот момент в рабочей области, останутся таковыми. Кроме того, будет открыт набор специфических окон С-SPY. Пользователь может изменить исходный текст своей программы в окне редактора в течение сеанса отладки, однако эти изменения не вступят в силу, пока не будет произведен выход из от- ладчика. Интеграция отладчика в IDE позволяет установить контрольные точ- ки средствами текстового редактора в любом месте пользовательской програм-
25.4. Отладка приложения в режиме симуляции 401 мы в ходе ее написания и редактирования. Также можно просматривать и изме- нять контрольные точки, когда отладчик не выполняется. В качестве примера работы с отладчиком IAR C-SPY Debugger, рассмотрим отладку приложения projectl.d79, создание которого было описано в предыду- щем разделе. В процессе отладки, пользователь может наблюдать за перемен- ными, устанавливать контрольные точки, просматривать код в режиме дизас- семблирования, управлять содержимым регистров и памяти и выводить на пе- чать выходные данные программы в терминальном окне ввода/вывода. Следует заметить, что работа отладчика в данном примере будет демонстри- роваться в виде программной симуляции, однако помимо симуляции возможна также отладка приложений и в «железе» с соответствующими драйверами от- ладчика, о чем будет подробнее рассказано в главе 30 «Отладка приложений в целевой системе». 25.4.1. Старт отладчика Перед стартом отладчика IAR C-SPY Debugger необходимо задать несколько его опций. Задание опций производится в следующей последовательности: 1. Выбрать в меню Project>Options, а затем категорию Debugger. На странице Setup убедиться, что выбрана строка симулятор Simulator из раскрывающегося списка Driver и пункт Run to main. «Кликнуть» мышью на кнопке ОК. 2. Выбрать Project>Debug. Альтернативно, можно нажать кнопку Debugger в инструментальной панели. Старт отладчика IAR C-SPY Debugger производится с загруженным приложениемprojectl.d79. В дополнение к окнам, уже открытым в IAR Embedded Workbench, пользователю теперь станет доступен набор специ- фических окон IAR C-SPY Debugger (Рис. 25.14). 304 Рис, 25,14, Отладка в режиме симуляции
402 Глава 25. Интегрированная среда IDE IAR Embedded Workbench ™ 25.4.2. Организация окон Пользовательский оконный интерфейс IAR Embedded Workbench позволяет расположить открытые окна в определенных местах на экране и организовать их в группы. Можно также сделать окно «плавающим», то есть расположить его поверх всех остальных окон. Если пользователь изменяет размер или область расположения плавающего окна, то это не затрагивает другие открытые в это время окна. Строка состояния, расположенная в нижней части главного окна IAR Embedded Workbench, содержит полезную справку о том, как оптимальным об- разом расположить окна. Прежде чем продолжить работу с отладчиком, удостоверьтесь, что на экране открыты следующие окна: окно рабочей области с активной конфигурацией projectl, окно редактора с исходными файлами Tutor.c и Utilities.c, и окно регис- тратора отладки Debug Log, как изображено на Рис. 25.14. 25.4.3. Просмотр команд исходного текста Для просмотра команд исходного текста необходимо выполнить следующие действия: 1. Дважды «кликнуть» мышью на файле Tutor.c в окне рабочей области. 2. Когда содержимое файла Tutor.c отобразится в окне редактора, следует выбрать команду Debug>Step Over. Альтернативно, можно нажать на кнопку Step Over на инструментальной панели. После этого, в тексте отображаемого файла появится курсор, текущая позиция которого указывает точку вызова функции init Jib, как показано на Рис. 25.15. TitoMlurtittesM Tutor ! ' 'l ; .\ ' * * put_fib( fib ) } |||Z* Prints the Fibonacci numbers. */ void main (void) { call count =0; Ф initTfiM); while ( call_count < MAX_FIB ) . { do_f oreground__process (); } JM_L±I______________________________ Puc. 25.15. Просмотр команд исходного текста
25.4. Отладка приложения в режиме симуляции 403 3. Выбрать в меню Debug>Step Into для показа передачи управления в функ- цию initJib. Альтернативно, можно нажать кнопку Step Into на инструменталь- ной панели. На уровне исходного текста, команды отладчика Step Over и Step Into поз- воляют выполнять пользовательское приложение в пошаговом режиме. Вы- полненная команда Step Over демонстрирует передачу управления с заходом его «внутрь» функций или вызовов подпрограмм, а при выполнении команды Step Into передача управления каждой функции демонстрируется как единс- твенный шаг без захода его «внутрь» функции. Обратите внимание, что после выполнения команды Step Into в окне редактора отобразится текст файла Utilities.c. как показано на Рис. 25.16, поскольку функция init Jib находится в этом файле. Рис, 25.16. Пример передачи управления «внутрь» функции 4. Используйте команду Step Into, пока точка управления не достигнет опе- ратора цикла for. 5. Используйте команду Step Over, пока точка управления не вернется в заголовок цикла for. Обратите внимание, что пошаговое движение при вы- полнении приложения производится на уровне вызова функций, а не уров- не операторов. Чтобы пошаговое движение производилось на уровне опе- раторов, следует выбрать команду Debug>Next statement. После этого за один шаг будет выполняться один оператор. Альтернативно, можно нажать на кнопку Next statement на инструментальной панели. Обратите внима- ние, что эта команда по своему выполнению отличается от команд Step Over и Step Into.
404 Глава 25. Интегрированная среда IDE IAR Embedded Workbench ™ 25.4.4. Отслеживание переменных C-SPY позволяет отслеживать значения переменных или выражений в ис- ходном тексте в процессе выполнения приложения. Отслеживать перемен- ную можно несколькими способами, например, мышью установить в окне ис- ходного текста указатель либо открыть одно из окон Locals, \fatch, Live \fatch или Auto. Примечание. Когда используется уровень оптимизации None, все нестатические перемен- ные будут полностью доступными для отладки. Когда используются более высокие уровни оптимизации, не все переменные будут полностью доступны для отладки. 25.4.4.1. Использование окна Auto 1. Выбрать View>Auto, чтобы открыть окно Auto. В окне Auto отобразятся те- кущие значения недавно изменяемых выражений, как показано на Рис. 25.17. Expression 1 Value Location I Type J fib 33033 R4 unsigned int ES getjib 0x0000816C unsigned int call_count 7 0x00100000 int Рис, 25,17, Наблюдение переменных в окне Auto 2. Продолжать пошаговое выполнение, чтобы наблюдать, как изменяется текущее значение нужной переменной. 25.4.4.2. Установка контрольных точек в окне Watch Следующий способ наблюдения переменных состоит в использовании окна Watch. 1. Выбрать View>Watch, чтобы открыть окно Watch. Обратите внимание, что это окно по умолчанию сгруппировано вместе с открытым в настоящее время окном Auto. Окна расположены как ряд позиций табуляции.
25.4. Отладка приложения в режиме симуляции 405 2. Для установки контрольной точки на переменной, используется следую- щий порядок действий. «Кликните» на пунктирном прямоугольнике в окне Watch. В появившемся поле входа, напечатайте имя нужной переменной, на- пример, call_count, и нажмите клавишу ENTER. Можно также перетащить пе- ременную из окна редактора в окно Watch. 3. Выбрать массив root в функции init Jib, затем перетащить его в окно Watch. В окне Watch отобразятся текущие значения call_count и root. Чтобы наблюдать эти значения более детально, можно развернуть массив root, как показано на Рис. 25.18. 4. Продолжить пошаговое выполнение в течение еще нескольких шагов, чтобы наблюдать изменение значений переменных call_count и root. 5. Чтобы удалить переменную из окна Watch, выберите ее и нажмите Delete. Expression I Value j Location Type call_count 10 0x00100000 int В root <array> 0x00100004 unsigned int[10] 1- [0] 1 0x00100004 unsigned int 1- [1] 1 0x00100008 unsigned int I- [2] 2 0x001OOOOC unsigned int Н [3] 3 0x00100010 unsigned int — I- И 5 0x00100014 unsigned int к [5] 8 0x00100018 unsigned int I- [6] 13 0x0010001C unsigned int I- [?] 21 0x00100020 unsigned int H [8] 34 0x00100024 unsigned int L.[9_] 55 0x00100028 unsigned int 1 • T- j Рис. 25.18. Отслеживание переменных в окне Watch 25.4.5. Установка и мониторинг точек останова Отладчик IAR C-SPY Debugger включает в себя эффективную систему точек останова. Самый удобный способ ее использования состоит в том, чтобы зада- вать точки останова в интерактивном режиме, позиционируя курсор на требуе- мой команде исходного теста или около нее, а затем выбирая команду Toggle Breakpoint. Задание точек останова производится в следующей последователь- ности: 1. Пусть требуется установить точку останова на команде get Jib(i). Сначала «кликните» на позиции табуляции Utilities.c в окне редактора, а затем «кликни- те» на требуемой команде, чтобы позиционировать на ней курсор. 2. После этого выберите Edit>Toggle Breakpoint. Альтернативно, можно на- жать кнопку Toggle Breakpoint на инструментальной панели. Точка останова бу- дет установлена на этой команде, а на левом краю окна напротив команды поя- вится красный значок «X», указывающий на заданную точку останова, как изображено на Рис. 25.19.
406 Глава 25. Интегрированная среда IDE IAR Embedded Workbench ™ Рис. 25.19. Задание точек останова 25.4.5.1 . Выполнение приложения до точки останова 1. Чтобы выполнять приложение только до тех пор, пока управление не до- стигнет точки останова, следует выбирать в меню Debug>Go. Альтернативно, можно нажать кнопку Go на инструментальной панели. Приложение выпол- нится до точки останова, которая была задана ранее. При передаче управления на точку останова, выполнение программы будет приостановлено, а команда будет подсвечена, как изображено на Рис. 25.20. 2. Чтобы удалить точку останова, следует выбрать ее в меню Edit>Toggle Breakpoint. TuforM IОШЙМI ркЩЬтарUtifcies Imot Initialize MAX_FIB Fibonacci numbers. void init_fib( void ) J int i = 45; root[0] = root[l] = 1; for ( i=2 ; i<MAX_FIB ; i++) { HI root[i] = get_fib(i| + get_fib(i-l); } Disassembly' 00008140 00008142 00008144 08008146 00008148 0000814A 0000814C 0000814E 00008150 00008152 2C0A DAOD r: gv* 1C20 FOOD F811 1C05 1E60 FOOD F80D 1828 > Puc. 25.20. Остановка программы на точке останова 25.4.6. Отладка в режиме дизассемблирования Отладка с использованием C-SPY обычно производится быстрее в режиме исходного файла на языках С/СС++. Однако если имеется необходимость по- лучить полное управление подпрограммами нижнего уровня, можно произво-
25.4. Отладка приложения в режиме симуляции 407 дить отладку в режиме дизассемблирования, где каждый шаг соответствует од- ной команде ассемблера. C-SPY позволяет свободно переключаться между эти- ми двумя режимами. Порядок действий, необходимый для переключения, следующий: 1. Произвести первый сброс приложения, «кликнув» на кнопке Reset на инструментальной панели. 2. Выбрать в меню View>Disassembly, чтобы открыть окно Disassembly, если оно еще на открыто. В открытом окне можно видеть, каким образом ассемблер- ный код соответствует текущим командам С, как показано на Рис. 25.21. Попро- буйте использовать в окне Disassembly различные команды пошагового выпол- нения приложения. Go to [ j*’! | Memory Next label main: 00008108 =/>'4.1 ' CPUj’it' is a Thumb label B500 0; PUSH {LR} 0000810A 4807 LDR RO, [PC,#0x01C] ; [0x8126 0000810C 2100 MOV Rl, #0 Ф ooooaioE 5001 ' STR Rl, [RO, #0] 1HJ1 1о 00008110 FOOD ; pre BL/BLX 00008112 F80C BL init_fib ; 0x812C Uhl 10 J, C all count < MAX FIB ' 00008114 4804 LDR feO, [PC,#0x010] ; [0x8126 00008116 6800 LDR RO, [RO, #0] 00008118 280A CMP RO, #10 0000811A DA02 BGE 0x008122 do round proc £3Si•г 0000811C F7FF ; pre BL/BLX 0000811E FFE6 BL do_foreground_process ; OxSOEC 00008120 E7F8 В 0x008114 C " ' ' ‘г. Рис. 25.21. Отладка в режиме дизассемблирования 25.4.7. Мониторинг регистров Окно Register позволяет разработчику наблюдать и модифицировать содер- жимое регистров процессора. Мониторинг регистров осуществляется следую- щим образом: 1. Выбрать в меню View>Register, чтобы открыть окно Register, как показано на Рис. 25.22. 2. Выполнить команду Step Over, чтобы продолжить выполнение програм- мы. При этом можно наблюдать, как меняются значения регистров процессора в окне Register. 3. Закрыть окно Register.
408 Глава 25. Интегрированная среда IDE IAR Embedded Workbench ™ | Register jj. |CPU Registers RO = 0x00008121 PC = 0x00008120 Rl = 0x000081E7 R8_fiq = 0x00000000 R2 = 0x00000001 R9_f iq = 0x00000000 R3 — 0x00100000 RIOfiq = 0x00000000 R4 = 0x00008109 Rllfiq = 0x00000000 R5 = 0x000080C7 R12_fiq = 0x00000000 R6 = 0x00008005 R13_fiq = 0x00000000 R7 = OxOOOOSOBD R14_fiq = 0x00000000 R8 = 0x00000000 EBSPSRfiq = 0x00000000 R9 = 0x00000000 R13_svc = 0x00000000 RIO = 0x00000000 R14_svc = 0x00000000 Rll = 0x00000000 [+]SPSR_svc = 0x00000000 R12 = 0x00000000 R13_abt = 0x00000000 R13 (SP) = 0x00102024 R14_abt = 0x00000000 R14 (LR) = 0X0000822F E|SPSR_abt = 0x00000000 ±]CPSR = OxOOOOOOFF R13_irq = 0x00102128 +1SPSR = 0x00000000 R14_irq = 0x00000000 Xj - Рис, 25.22. Мониторинг регистров 25.4.8. Мониторинг памяти Окно Memory позволяет разработчику наблюдать содержимое выбранных об- ластей памяти. Можно, например, просмотреть область памяти, соответствую- щую переменным root. Мониторинг памяти осуществляется следующим образом: 1. Выбрать View>Memory, чтобы открыть окно Memory, как показано на Рис. 25.23. Soto | 00060660 00000010 00000020 00000030 00000040 00000050 00000060 00000070 00000080 18 00 58 00 00 00 00 00 00 f Memory [ Ready 3 |мепточГЗ S f0 00 80 00 00 00 00 00 00 9f 00 00 00 00 00 00 00 00 е5 00 00 00 00 00 00 00(. t)0 oo'-oo 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 X, jpos 00000000 зг Puc. 25.23. Окно Memory 2. Сделать активным окно Utilities.с и выбрать root, а затем перетащить его из окна файла источника на С в окно Memory. При этом, в окне Memory будет отображено содержимое области памяти, соответствующей расположению пе- ременной root.
25.4. Отладка приложения в режиме симуляции 409 3. Чтобы отобразить содержимое памяти в виде 16-битных слов данных, выберите команду Метогу16 в выпадающем меню на инструментальной панели окна Memory. Если не все модули памяти были инициализированы функцией init_fib при- ложения, то следует продолжить выполнение программы с помощью команды Step Over и наблюдать, как содержимое памяти будет модифицироваться. Можно вручную модифицировать содержимое памяти, редактируя значе- ния в окне Memory. Для этого следует поместить курсор на ячейку памяти, под- лежащую редактированию, и набрать с клавиатуры ее новое значение. 4. Закройте окно Memory. 25.4.9. Просмотр окна терминала ввода/вывода При отладке приложения, может возникнуть необходимость отладки ко- манд, использующих функции stdin и stdout, даже при отсутствии поддерживаю- щих их аппаратных средств. C-SPY позволяет разработчику моделировать фун- кции stdin и stdout, используя окно Terminal I/O. Примечание. Окно Terminal I/O будет доступно в С-SPY только в том случае, если компо- новка проекта производится с использованием опции вывода компоновщика With I/O emulation modules. Это означает, что некоторые подпрограммы нижнего уровня будут непос- редственно связаны с функциями stdin и stdout окна Terminal I/O. Просмотр терминала ввода/вывода осуществляется следующим образом: надо выбрать View>Terminal I/O, чтобы отобразить операции ввода/вывода, как показано на Рис. 25.24. Содержимое окна Terminal I/O зависит от того, как дол- го выполнялось приложение. Terminal I/O Input: Ctrl codes | Input Mode... II Buffer size: 0 Puc. 25.24. Окно Terminal I/O
410 Глава 25. Интегрированная среда IDE IAR Embedded Workbench ™ 25.4.10. Завершение выполнения приложения Чтобы завершить выполнение приложения, нужно выполнить следующие действия: 1. Выбрать Debug>Go. Альтернативно, можно нажать на кнопку Go на инс- трументальной панели. Это вызовет выполнение (симуляцию выполнения) приложения в реальном времени. Если управление больше не попадает на точ- ки останова, C-SPY достигает конца приложения и производит выход из про- граммы, о чем выдает сообщение в окне Debug Log, как показано на Рис. 25.25. Log Wed Apr 1919:17 28 2006 Target reset Wed Apr 19 19 26:57 2006. Program exit reached Wed Apr 19 19 43 26 2006 Target reset Wed Apr 19 19.43 29 2006. Program exit reached. Debug Log [Build Puc, 25,25, Сообщение о завершении выполнения приложения в окне Log Процесс завершения приложения будет также отображен в окне Terminal I/O. Если необходимо снова запустить отлаживаемое приложение, следует вы- брать в меню Debug>Reset, или «кликнуть» на кнопке Reset в инструментальной панели. 2. Для выхода из C-SPY следует выбрать Debug>Stop Debugging. Альтерна- тивно, можно нажать на кнопку Stop Debugging на инструментальной панели. На экране отобразится рабочая область.
ГЛАВА 26 СОВМЕСТНОЕ ИСПОЛЬЗОВАНИЕ В ПРИЛОЖЕНИИ МОДУЛЕЙ НА С И НА АССЕМБЛЕРЕ В некоторых проектах может возникнуть необходимость написать какие-то части исходного текста на языке ассемблера, в то время как остальные части на- писаны на языке С. IAR Embedded Workbench предоставляет разработчику та- кую возможность. В указанных случаях, необходимо соблюдать определенные соглашении о вызовах, действующее при вызове модулей ассемблера из моду- лей С/С ++ или наоборот. Используя это соглашение, можно легко комбиниро- вать исходные модули, написанные на С, с модулями, написанными на ассемб- лере. Указанные возможности применимы также и к проектам, содержащим исходные модули, написанные на встроенном C++ (Embedded C++). 26.1. Соглашение о вызовах При записи ассемблерной подпрограммы, которая будет вызываться из под- программы на С, необходимо учитывать соглашение о вызовах, используемое компилятором. В качестве примера использования такого соглашения, ниже будет описана последовательность создания «скелетного» кода на С и разреше- ния компилятору генерировать из этого кода выходной файл на ассемблере. Настроим компилятор таким образом, чтобы он создавал выходной файл на ассемблере из С-файла Utilities.с: 1. Создадим новый проект в рабочей области, используемой в предыдущих примерах, и назовем его project2 (вместо создания нового проекта можно ис- пользовать ранее созданный проект project 1). 2. Добавим к проекту файлы Tutor.c и Utilities.c. Чтобы отобразить рабочую область, нажмите позицию табуляции Overview, доступную в нижней части окна рабочей области. Чтобы видеть только недавно созданный проект, выберите позицию табуляции project!. На экране вы должны видеть только project2. 3. Чтобы задать опции на узле уровня файла, в окне рабочей области выби- рается файл Utilities.c. Выберите Project>Options. При этом, обратите внимание, что доступны только категории C/C++ Compiler и Custom Build. 4. В категории C/C++ Compiler выберите Override inherited settings и про- верьте параметры настройки, приведенные в Табл. 26.1. Примечание. В этом примере необходимо использовать низкий уровень оптимизации при компилировании кода, чтобы показать доступ к местным (локальным) и глобальным пере- менным. Если использовать более высокий уровень оптимизации, то ссылки на местные пе- ременные могут быть удалены. Фактическое объявление функции с изменением уровня опти- мизации не меняется.
412 Глава 26. Совместное использование в приложении модулей на С и на ассемблере Таблица 26.1. Параметры настройки компилятора для проекта project2 Страница окна Параметр: значение Optimization Size: None (Best debug support) List Output assembler file Include source Include compiler runtime information (deselected) 5. «Кликните» на кнопке ОК для возвращения к окну рабочей области. 6. Откомпилируйте файл Utilities.c. После этого можно найти выходной файл Utilities.s79в подкаталогеprojects\debug\list. 7. Чтобы исследовать соглашение о вызовах и увидеть, как код на С или C++ представлен на ассемблере, откройте файл Utilities.s79. Анализируя его со- держимое, легко видеть, где и каким образом производится передача парамет- ров, как производится возврат управления по адресу, следующему за адресом вызова функции, и каким образом возвращается конечное значение. Вы можете также видеть, какие регистры сохраняет подпрограмма на уровне ассемблера. Чтобы получать правильный интерфейс для собственных прикладных фун- кций, пользователю следует создавать «скелетный» код для каждой функции, которая ему требуется. 26.2. Добавление ассемблерного модуля к проекту Приведенный ниже пример демонстрирует возможность создания проекта, содержащего модули на ассемблере и на С. К проекту, содержащему модуль на С, добавляется модуль на ассемблере, содержащий функцию___write. Эта функ- ция является примитивной функцией вывода, использующей функцию putchar, чтобы обработать символьный вывод. При стандартном выполнении функции __write производится переадресация символьного вывода на окно Terminal I/O отладчика C-SPY. В предлагаемом примере будет создана модифицированная версия функции____write, которая будет производить вывод с дополнительной особенностью — символом «*» перед каждым выводимым символом. 26.2.1. Модификации заданных установок проекта Изменим созданный ранее проект project2 следующим образом: 1. Добавить файл Wrire.s79. Примечание. Чтобы увидеть файлы ассемблера в диалоговом окне Add files, выберите, Project>Add files, а затем выберите Assembler Files из раскрывающегося списка Files of type, изображенного на Рис. 26.1. 2. Выберите уровень узла уровня проекта в окне рабочей области, выбрав в меню Project>Options. Используйте настройки по умолчанию в категориях General Options, C/C++ Compiler и Linker. Выберите категорию Assembler, в ней — позицию табуляции List и выберите там опцию Output list file, как показа- но на Рис. 26.2. «Кликните» на кнопке ОК. 3. Выберите файл Wrire.s79 в окне рабочей области, выбрав в меню Project>Compile, и оттранслируйте его. Если исходный ассемблерный файл был оттранслирован успешно, будет создан файл Write.г79, содержащий пригодный для компоновки объектный код.
26.2. Добавление ассемблерного модуля к проекту 413 Add Files - pieject! 0® Папка: |Q ^or Недавние документы S]Main,s79 В Maxmin.s79 Bl Write.s79 Рабочий стол Мои документы Сетевое окружение Имя Файла: Тип файлов: * Открыть Assembler Files (х. sx;x msa;x. asm) jr Отмена C/C++ Files (x.c;x.cpp;x.cc;x.h;x.hpp) C/C++ Source Files (x c;x.cpp;x.ccj C/C++ Header Files (x.h;x hpp) Assembler Files .('l,slS.rfi$a;\asm], Library/О bject Files (x.rx) Debug Files (x x) All Files [x.x] Puc. 26.1. Добавление ассемблерных файлов к проекту Options for node “projectr* Category- General Options C/C++Compiler Assembler Custom Build Build Actions Linker Debugger Simulator Angel IAR ROM-monitor J-Link Macraigor RDI Third-Party Driver Language | Output Cist P fiutput listffe P Includeheader p Include listing Г ^included text Г* Macro definitions p Macro expansions Г~ Macro execution info Г Assembled lines only Г Multiline code Factory Settings | Preprocessor | Diagnostics | Extra Options | Г" Include gross reference Г tb:H;nas Г internal symbols Г Dual lina sgaHng Г Lines/page: |55 Tab spacing: p OK I Cancel Puc. 26.2. Задание ассемблерных опций в проекте
414 Глава 26. Совместное использование в приложении модулей на С и на ассемблере 26.2.2. Исследование ассемблерного файла листинга Открыть файл листинга, дважды «кликнув» на позицию табуляции Write.1st, доступную в папке Output окна рабочей области. В конце этого файла содержатся список ошибок и предупреждений, которые были сгене- рированы в процессе трансляции, и контрольная сумма (CRC). 26.2.3. Завершение компоновки проекта 1. Выбрать Project>Make, чтобы повторно скомпоновать project2. 2. Произвести старт C-SPY, чтобы выполнить приложение project2.d79 и иметь возможность наблюдать (в окне Terminal I/O), что оно выполняется так же, как было описано выше, но с символом «*» перед каждым выводимым сим- волом (см. Рис. 26.3). 3. Выйти из отладчика, когда приложение завершит свою работу. *2* *3* *5* *g* *3*4* *5*5 1гц codes | Input Mode... | Р Buffer size: О Рис. 26.3. Результат работы приложения с добавленным ассемблерным модулем
ГЛАВА 27 СИМУЛЯЦИЯ ПРЕРЫВАНИЙ В приведенном ниже примере к пользовательскому проекту будет добавлена программа обработки прерывания от последовательного порта. Числа Фибо- наччи, генерируемые приложением, будут читаться через встроенное коммуни- кационное периферийное устройство (последовательный порт UART). В при- мере будет показано, как могут использоваться ключевые слова компилятора ARM IAR С/С ++____irq и_arm, а также, каким образом при симуляции преры- вания используются точки останова и макроопределения (макросы). Следует заметить, что этот пример не описывает точное моделирование, а цель его за- ключается в том, чтобы проиллюстрировать для разработчика ситуацию, при которой макроопределения С-SPY и точки останова могут быть использованы для симуляции (моделирования) аппаратных средств системы прерываний си- мулируемого микроконтроллера. Обратите внимание, что симуляция прерывания возможна только в том слу- чае, когда используется IAR C-SPY Simulator (драйвер симулятора C-SPY). 27.1. Добавление программы обработки прерывания В этом разделе будет рассмотрено, как простым способом программно си- мулировать генерацию прерывания. Программа обработки прерывания будет читать значения из регистра приема UART UARTRBRTHR (в заголовочных файлах —____UARTRBRTHR), а затем выводить эти значения для просмотра. Основная программа разрешает прерывания и в ходе своего выполнения начи- нает выводить в окне Terminal I/O для просмотра периоды в виде точек (.), ил- люстрирующие выполнение основного цикла (так называемого приоритетного процесса) в ожидании прерываний. 27.1.1. Текст программы обработки прерывания Следующие строки определяют программу обработки прерывания, исполь- зуемую в' этом примере (полный исходный код может быть найден в файле Interrupt.с, находящемся в каталоге arm/tutor)\ // определить обработчик запроса IRQ __irq _arm void irqHandler( void ) В этом определении: __irq — ключевое слово, которое служит для того, чтобы сообщить компилято- ру, что используется соглашение о вызовах, для которого требуются функ- ции обработки прерываний;
416 Глава 27. Симуляция прерываний __arm — ключевое слово, которое служит для того, чтобы гарантировать, что обработчик IRQ будет откомпилирован в режиме ARM. В этом примере прерывания генерирует только UART, так что нет никакой необходимости программно проверять источник прерывания. В общем случае, когда ис- пользуется несколько источников прерываний, программа обработки пре- рывания должна проверять источник прерывания перед выполнением его обработки. 27.2. Задание параметров проекта 1. Добавить новый проект project4 в рабочую область, используемую в пре- дыдущих примерах. 2. Добавить к проекту файлы Utilities.c и Interrupt.c. 3. В окне рабочей области выберите узел уровня проекта и выберите в нем Project>Options. Выберите категорию General Options и «кликните» на позиции табуляции Target. Выберите ARM7TDMI из раскрывающегося меню Core. Кро- ме того, удостоверьтесь, что в категориях C/C++ Compiler и Linker используют- ся заданные по умолчанию параметры настройки. Теперь следует установить среду симуляции. 27.2.1 . Установка среды симуляции Система прерываний C-SPY основана на использовании счетчика циклов. Пользователь может вручную определить количество циклов, которое будет вы- полнено симулятором прежде, чем C-SPY сгенерирует прерывание. Чтобы си- мулировать ввод данных из интерфейса UART, значения будут читаться из фай- ла InputData.txt, который содержит числа ряда Фибоначчи. На приемный ре- гистр UART (UARTRBRTHR) будет установлена так называемая точка останова немедленного чтения и подключена определенная пользователем макрофунк- ция (в этом примере — макрофункция AccessQ). Макрофункция прочитает зна- чение числа Фибоначчи из указанного текстового файла. Всякий раз, когда будет сгенерировано прерывание, подпрограмма преры- вания будет читать регистр UARTRBRTHR. При этом будет срабатывать точка останова, выполняться макрофункция Access() и значения чисел Фибоначчи бу- дут попадать в приемный регистр UART. Необходимо подчеркнуть, что точка останова немедленного чтения вызовет останов до того, как процессор прочи- тает регистр UARTRBRTHR, что позволит макрокоманде сохранить новое зна- чение в регистре, который затем будет прочитан командой немедленного чте- ния. Ниже приводится последовательность шагов настройки симулятора, необ- ходимых для симуляции прерывания от последовательного порта: • определение файла установок C-SPY, который открывает файл InputData.txt и определяет макрофункцию AccessQ, • определение опций C-SPY, • формирование проекта, • старт симулятора, • определение запроса прерывания, • установка точки останова и ассоциации с ней (привязки к ней) макро- функции AccessQ.
27.2. Задание параметров проекта 417 27.2.2 . Определение макрофайла установок C-SPY C-SPY позволяет задать макроопределение установок, которое вступает в силу в ходе запуска C-SPY. В этом примере будет использоваться файл макроко- манды C-SPY Setup Simple, mac, который находится в каталоге arm\tutor. Этот файл имеет следующую структуру. Сначала в файле определяется функция макрокоманды установки execUserSetup(), которая автоматически выполняется в ходе установки C-SPY Таким образом, установка среды моделирования производится автоматически. Чтобы подтвердить, что указанная макрокоманда выполнена в окне Debug Log, выводится сообщение: execUserSetup() { __message "execUserSetup() called\n"; Затем, будет открыт файл InputData.txt, который содержит ряд чисел Фибо- наччи: _fileHandle = __openFile( "$TOOLKIT_DIR$\\ tutor\ \InputData.txt", "г" ) ; После этого будет определена макрофункция Access(). Она будет читать чис- ла Фибоначчи из файла InputData.txt и направлять их по адресу приемного ре- гистра: Access() { __message "Access () called\n"; __var _fibValue; if( 0 == __readFile( _fileHandle, &_fibValue ) ) { UARTRBRTHR = _fibValue; } } Необходимо подключить макрокоманду Access() к точке останова немедлен- ного чтения, что и будет сделано позднее. Кроме того, файл содержит две мак- рофункции для того, чтобы управлять правильной обработкой файла при сбро- се и выходе. После создания (определения) макрофайла нужно произвести установку других необходимых опций С-SPY. 27.2.3 . Определение опций C-SPY 1. Чтобы выбрать опции C-SPY, связанные с заданием макрофайла, выбери- те в меню Project>Options. В категории Debugger, «кликните» на позиции табу- ляции Setup. 2. Используйте кнопку обзора в опции Use macro file, чтобы определить мак- рофайл, который будет использоваться (SetupSimple.тас) и путь к нему. Альтер- нативно, можно использовать переменный аргумент для задания пути: $TOOLKIT_DIR$\tutor\SetupSimple.mac
418 Глава 27. Симуляция прерываний 3. Установите опции Device description file в соответствии с файлом ioml674001.ddf, как изображено на Рис. 27.1. Информация в этом файле необхо- дима для системы прерываний. Примечание. Данный файл описывает периферию и векторы прерываний/исключений микроконтроллера ML674001, прерывания которого, собственно, и моделируются в данном примере. Аналогичный файл, относящийся к микроконтроллерам семейства LPC2000, имеет шаблон имени iolpc21xx.ddf (например, iolpc2129.ddfдля микроконтроллера LPC2129) и может быть использован сходным образом. Необходимо заметить, что приемный регистр UART в этом файле (и в микроконтроллере LPC2000) имеет другое имя. Все файлы, о которых идет речь, находятся в каталоге ...\Embedded Workbench 4.n\arm\config. Options for node "projects* Category: General Options C/C++ Compiler Assembler Custom Build Build Actions Linker Debugger Simulator Angel IAR ROM-monitor J-Link Macraigor RDI Third-Party Driver Factory Settings Setup | Download | Extra Options | Plugins | Driver P’ Run to Isimulaitor [main-" - Setup macros------------------------- P Use macro file pTOOLK^ - Device description file-------------- P Override default $T 0 0 LKI T_D IR $\config\ioml674001. ddf OK | Cancel | Puc. 27.1. Задание опций C-SPY для симуляции прерываний 4. Выберите в опции Run to значение main и «кликните» на кнопке ОК. Это гарантирует, что сеанс отладки начнется с выполнения функции main. Теперь проект готов к формированию. 27.2.4 . Формирование проекта Откомпилируйте и скомпонуйте проект, выбрав Project>Make. Альтерна- тивно, можно «кликнуть» на кнопке Маке на инструментальной панели. Ко- манда Маке скомпилирует и скомпонует те файлы, которые изменились.
27.2. Задание параметров проекта 419 27.2.5 . Старт симулятора 1. Запустите C-SPY Debugger, чтобы выполнить проект projects На экране отобразится (среди других окон) окно Interrupts Log. «Кликните» на нем, чтобы сделать его активным. 2. Проанализируйте содержимое окна Debug Log. Обратите внимание, что макрофайл загружен, и что функция execUserSetup была вызвана (Рис. 27.2). Log......... ........................................................................................... Sat Apr 22 19 53.49 2006 Loaded macro file: C\IAR_Systems\Embedded_Workbench_4.0_Evaluation\arm\tutor\SetupSimple mac Sat Apr 22 19 53 49 2006 Loaded debugee c:\IAR_Systems\projects\Debug\Exe\project4 d79 Sat Apr 22 19:53 49 2006 Target reset Sat Apr 22 19:53 49 2006 execU serResetQ called Sat Apr 22 19.53:49 2006 execUserSetupQ called Debug Log 16reafcpoint$ " ' {Ready................................................................................................................. J ' ' ' Г Г Рис. 27.2. Старт симуляции прерываний 27.2.6 . Определение симулируемого прерывания Теперь можно определить прерывание, чтобы заставить C-SPY симулиро- вать его каждые 2000 циклов: 1. Выберите Simulator>Interrupts, а в нем New, чтобы отобразить диалоговое окно Interrupts. 2. Установите параметры настройки для прерывания, приведенные в Табл. 27.1, как изображено на Рис. 27.3. Таблица 27.1. Настройки параметров диалогового окна Interrupts Установка Значение Описание Interrupt IRQ Определяет, какие прерывания будут использоваться Description Как есть (по умол- чанию) Определение прерывания, которое использует симулятор, чтобы коррек- тно смоделировать прерывание Activation Time 4000 Определяет время активации первого прерывания. Прерывание активи- руется, когда счетчик циклов содержит это значение Repeat Interval -'2000 Определяет повторный интервал прерывания, измеренный в тактовых циклах Hold time Infinite Время задержки (здесь не используется) Probability % 100 Определяет вероятность. Значение этого параметра, равное 100%, указы- вает, что прерывание будет происходить с заданной частотой. Меньшие величины процентов используются, чтобы симулировать более случайное поведение прерываний Variance 0 Время вариаций (здесь не используется)
420 Глава 27. Симуляция прерываний Edit Interrupt Interrupt _____________________________________ —J Description: OK I Cancel First activation: [4000 Repeat interval: |2000 Variance (%): - Hold time------------- <* Infinite r |o Probability (%): [Too 3 Puc. 27.3. Задание параметров настройки прерывания В ходе выполнения С-SPY будет ждать, пока счетчик циклов не подсчитает время активации. Когда текущая ассемблерная команда будет выполнена, С- SPY сгенерирует прерывание, которое будет повторяться приблизительно каж- дые 2000 циклов. 3. После определения параметров настройки, «кликните» ОК, чтобы за- крыть диалоговое окно Interrupts. Чтобы автоматизировать процедуру определения прерывания, разработчик может, вместо вышеописанной процедуры, использовать системную макроко- манду __orderinterrupt в файле установок C-SPY. Ниже будет показано, как мо- жет быть использована эта макрокоманда, чтобы автоматизировать процесс. 27.2.7 . Задание точки останова немедленного чтения Определяя макрокоманду и подключая ее к точке останова немедленного чтения, пользователь может смоделировать макрокомандой поведение аппа- ратного устройства, например порта ввода/вывода, как это сделано в описывае- мом примере. Точка останова немедленного чтения не будет прерывать выпол- нение, а только временно приостановит его, чтобы отметить условия останова и выполнить связанную с ней макрокоманду. В данном примере, моделируется ввод из UART путем, установки точки останова немедленного чтения на адрес UARTRBRTHR и подключения к ней макрокоманды Access(). Макрокоманда моделирует ввод из UART Задание точки останова немедленного чтения состо- ит из следующих шагов: 1. Выбрать View>Breakpoints, чтобы отобразить диалоговое окно Breakpoints, в котором «кликнуть» правой кнопкой «мыши», после чего откроется контекс- тное меню. В нем следует выбрать New Breakpoint>Immediate, после чего откро- ется окно New Breakpoint с таблицей Immediate. 2. Таблицу Immediate необходимо заполнить в соответствии с Табл. 27.2.
27.3. Выполнение приложения 421 Таблица 27.2. Настройки параметров окна Immediate Установка Значение Описание Break at UARTRBRTHR Получить адрес буфера Access Type Read Тип точки останова (чтение или запись) Action AccessQ Макрокоманда, связанная с точкой останова В ходе выполнения, когда C-SPY обнаружит доступ для чтения по адресу UARTRBRTHR, он временно приостановит симуляцию и выполнит макроко- манду Access(). Макрокоманда будет читать значение из файла InputData.txt и за- писывать его в UARTRBRTHR. После этого C-SPY возобновит симуляцию, чи- тая получившееся содержимое UARTRBRTHR. 3. «Кликнуть» ОК, чтобы закрыть диалоговое окно New Breakpoints. Чтобы автоматизировать установку контрольной точки, можно, вместо все- го вышеприведенного, использовать системную макрокоманду_______setSimBreak в файле установок C-SPY. 27.3. Выполнение приложения Когда в ходе выполнения приложения, управле- ние в программе достигает цикла с условием w/nfe, которое ожидает ввода, происходят временные оста- новы. Запуск приложения на выполнение произво- дится в следующей последовательности: 1. В окне исходного файла Interrupt.с найти фун- кцию irqHandler. 2. Установить на команде ++ callCount; внутри функции irqHandler точку останова немедленного чтения, выбрав Edit>Toggle Breakpoint или «кликнув» на кнопке Toggle Breakpoint на инструментальной панели. 3. Открыть окно Terminal I/O и запустить прило- жение, выбрав Debug>Go или «кликнув» на кнопке Go на инструментальной панели. Приложение должно остановиться в функции обработки преры- ваний. 4. «Кликнуть» Go, чтобы убедиться, что следую- щее число Фибоначчи будет напечатано в окне Terminal I/O. Поскольку основная программа имеет Рис. 27.4. Вывод чисел Фибоначчи в окне Terminal I/O верхний предел для счетчика значений Фибоначчи, приложение скоро достигнет метки выхода и останова. При этом, окно Terminal I/O отобразит ряд Фибоначчи (Рис. 27.4),, 27.4. Использование макроопределений для прерываний и точек останова Автоматизировать задание точек останова и процедуры определения преры- ваний можно, соответственно, с помощью системных макроопределений (мак- росов) _setSimBreak и_order Interrupt. Они могут быть выполнены макроко- мандой установки execUserSetupQ.
422 Глава 27. Симуляция прерываний Файл SetupAdvanced, mac может быть дополнен вызовами системных макро- определений задания точек останова и процедуры определения прерываний, как показано ниже: SimulationSetup () {... _interruptID =______orderinterrupt( "IRQ", 4000, 2000, 0, 0, 0, 100 ); if( -1 == _interruptID ) { __message "ERROR: failed to order interrupt"; } _breakID =____setSimBreak( "UARTRBRTHR", "R", "Access!)" ); } Если заменить файл SetupSimple.mac, используемый в описанном выше при- мере, на файл с вызовами системных макроопределений задания точек остано- ва и процедуры определения прерываний, то установка точек останова и опре- деление прерываний будут автоматически производиться при запуске С-SPY. Таким образом, при симуляции отпадет необходимость вручную заносить зна- чения в диалоговые окна Interrupts и Breakpoints. Примечание. Прежде чем загрузить файл SetupAdvanced.mac, необходимо предварительно удалить заданную точку останова и прерывание.
ГЛАВА 28 РАБОТА С МОДУЛЯМИ БИБЛИОТЕК В данной главе помимо общих сведений на конкретном примере будет по- казано, как создать библиотечные модули и как объединить прикладной проект с библиотечным проектом. 28.1. Использование библиотек В ходе работы над большим проектом, у разработчика, как правило, накап- ливается целая коллекция полезных подпрограмм, которые впоследствии можно использовать и в других приложениях. С тем, чтобы не транслировать эти подпрограммы всякий раз, когда в них возникнет необходимость, разра- ботчик может сохранить их как объектные файлы, которые оттранслированы, но не скомпонованы. Коллекция подпрограмм в отдельном объектном файле называется библиотекой. Рекомендуется использовать библиотечные файлы для создания коллекций связанных подпрограмм, образующих драйверы уст- ройства. В состав IAR Embedded Workbench входит программа построения библиотек IAR XAR Library Builder™. IAR XAR Library Builder™ позволяет следующим об- разом управлять библиотеками: • изменять тип модулей с PROGRAM на LIBRARY и наоборот; • добавлять или удалять модули из библиотечного файла; • создавать листинг имен модулей, имен точек входа и т. д. Пример — программа Main.s79 Программа Main.s 79 с помощью подпрограммы max устанавливает содержи- мое регистра R1 равным максимальному из значений регистров R1 и R2. Ди- ректива EXTERN объявляет max как внешний символ, разрешенный на время компоновки. Копия программы находится в каталоге arm\tutor. Библиотечные подпрограммы Две библиотечных подпрограммы образуют отдельно собираемую (ассемб- лируемую) библиотеку. Она состоит из подпрограммы max, вызываемой из main, и соответствующей ей подпрограммы min. Обе эти подпрограммы опери- руют содержимым регистров Rl, R2 и возвращают результат в R1. Файл, содер- жащий эти библиотечные подпрограммы, называется Maxmin.s79, а его копия
424 Глава 28. Работа с модулями библиотек поставляется в составе IDE. Подпрограммы определены как библиотечные мо- дули в соответствии с директивой MODULE, которая инструктирует компо- новщик IAR XLINK Linker использовать эти модули как подключаемые, если на них ссылается другой модуль. Директива PUBLIC делает символы max и min общими для других модулей. 28.2. Создание нового проекта Создание нового проекта для демонстрации работы с библиотеками следует производить в следующем порядке: 1. В рабочую область, используемую в предыдущих примерах, добавьте но- вый проект projects. 2. Добавьте к новому проекту файл Main.s79. 3. Для установки опций выберите в меню Project>Options. Выберите катего- рию General Options и «кликните» на позицию табуляции Library Configuration. Выберите None из раскрывающегося списка Library, что означает: библиотека не будет скомпонована в соответствии со стандартом C/C++. Для других кате- горий опций используются установки, заданные по умолчанию. 4. Чтобы оттранслировать файл Main.s79, выберите его в окне рабочей об- ласти, а затем выберите Project>Compile, либо нажмите кнопку Compile на инс- трументальной панели. 28.3. Создание библиотечного проекта После того, как проект projects создан, можно создать библиотечный проект. Делается это следующим образом: 1. В ту же рабочую область добавьте новый проект tutor_library. 2. Добавьте к проекту файл Maxmin.s79. 3. Для установки опций, выберите в меню Project>Options. В категории General Options задайте параметры настройки, в соответствии с приведенными в Табл. 28.1. Таблица 28,1, Параметры настройки XLINK для библиотечного проекта Страница окна Параметр: значение Output Output file: Library Libraiy Configuration Library: None Обратите внимание, что в списке категорий появилась категория Library Builder (Рис. 28.1). Это означает, что программа построения библиотек IARXAR Library Builder была добавлена в набор инструментальных средств. Если в уста- новке опций XAR Library Builder нет необходимости, «кликните» на кнопке ОК. 4. Выберите Project>Make. После этого будет создан библиотечный выход- ной файл tutor_library.r79.
28.4. Использование библиотеки в прикладном проекте 425 Рис, 28,1, Задание опций библиотечного проекта 28.4. Использование библиотеки в прикладном проекте Теперь добавим к проекту projects библиотеку, содержащую подпрограмму maxmin. Сделать это можно следующим образом: 1. В окне рабочей области, выберите позицию табуляции projects. Выберите в меню Project>Add Files и добавьте к проекту файл tutor_library,r79, расположен- ный в каталоге projects\Debug\Exe, «кликнув» на кнопке Open. 2. «Кликните» Маке, чтобы сформировать проект. 3. Теперь библиотека объединена с прикладным проектом и приложение го- тово к выполнению. Для получения дополнительной информации об управлении библиотеками, рекомендуется обратиться к источнику [4].
ГЛАВА 29 УНИВЕРСАЛЬНЫЙ КОМПОНОВЩИК IAR XLINK LINKER™ Данная глава написана по материалам источника [4]. Для получения допол- нительной информации о компоновщике IAR XLINK, рекомендуется обра- титься к указанному документу. Компоновщик (линковщик) IAR XLINK преобразует один или более пере- мещаемых объектных файлов, созданных в результате работы ассемблера IAR или компилятора, в машинный код для выбранного процессора целевой поль- зовательской системы. Компоновщик IAR XLINK поддерживает пользовательские библиотеки. Он включает в машинный код только те библиотечные модули, которые фактичес- ки необходимы программе, с которой они связаны. Конечным продуктом работы компоновщика IAR XLINK является абсо- лютный, готовый для выполнения в целевой пользовательской системе объект- ный файл, который может быть записан в оперативную или постоянную память микроконтроллера, загружен в аппаратный эмулятор или может выполняться непосредственно в хосте с использованием отладчика IAR C-SPY Debugger. Компоновщик IAR XLINK имеет следующие характерные особенности: • не ограничивает количество входных файлов; • осуществляет поиск определенных пользователем библиотечных файлов и загружает только необходимые для работы приложения модули; • поддерживает, с помощью использования гибких сегментных команд, управление процессом размещения в памяти перемещаемого кода и дан- ных; • поддерживает более 30 выходных форматов. Процесс компоновки IAR XLINK иллюстрируется блочной диаграммой, изображенной на Рис. 29.1. Исходная программа Исходная программа Абсолютный исполняемый объектный файл Рис, 29,1, Блок-схема процесса компоновки, производимой IAR XLINK
29.1. Объектный формат 427 29.1. Объектный формат Объектные файлы, создаваемые ассемблером IAR и компилятором, исполь- зуют частный объектный формат UBROF (Universal Binary Relocatable Object Format — универсальный двоичный перемещаемый объектный формат). Этот формат является входным для компоновщика IAR XLINK. Приложение может быть составлено из любого количества UBROF-файлов в любой комбинации программ на ассемблере и C/C++. 29.2. Функции IAR XLINK При компоновке программы, компоновщик IAR XLINK выполняет четыре различных функции: • преобразует в загрузочные модули исполняемый код или данные из вход- ного файла (файлов); • связывает различные модули вместе, разрешая применение глобальных, т. е. используемых всей программой, символов, применение которых не могло быть разрешено ассемблером или компилятором; • преобразует в загрузочные модули необходимые программе и определен- ные пользователем IAR-библиотеки; • задает местоположение каждого сегмента кода или данных в определен- ном пользователем адресе. 29.3. Выходной формат Конечным продуктом работы компоновщика IAR XLINK является абсо- лютный исполняемый объектный файл, который может быть помещен в па- мять микроконтроллера, загружен в аппаратный эмулятор или выполнен на хост-компьютере с использованием симулятора отладчика IAR C-SPY Debugger. Примечание. Заданный по умолчанию выходной формат в IDE IAR Embedded Workbench — формат DEBUG, т. e. формат, предназначенный для отладчика. 29.4. Входные файлы и модули Блочная диаграмма, приведенная на Рис. 29.2, иллюстрирует, как компо- новщик IAR XLINK обрабатывает входные файлы и загрузочные модули для типичной программы на ассемблере или C/C++. Как видно из рисунка, основ- ная программа собирается от двух исходных объектных файлов (module_a.snn и module_b.snri\, чтобы получить два перемещаемых файла, которые включают в себя отдельные модули module_a и modulejb, соответственно. По умолчанию, ассемблер назначает для модулей module_a и module_b атрибут PROGRAM. Это означает, что эти модули будут загружаться и компоноваться всякий раз, когда они содержатся в файлах, обрабатываемых компоновщиком IAR XLINK. Код и данные из единственного исходного файла на C/C++ (library.mn) об- разуют отдельный модуль в создаваемом компилятором файле. Другими слова- ми, имеет место взаимно-однозначное соответствие между исходными файла- ми на C/C++ и модулями C/C++. По умолчанию, компилятор дает этому мо- дулю то же самое имя, что и у оригинального исходного файла на C/C++.
428 Глава 29. Универсальный компоновщик IARXLINKLinker™ Объектные файлы: Модули: module_a.snn module_b.snn library.mn Абсолютный исполняемый объектный файл Рис, 29,2, Блок-схема обработки IAR XLINK входных файлов и загрузочных модулей Библиотеки для множества модулей C/C++ могут быть созданы с использо- ванием построителя библиотек IAR XAR Library Builder™ или набора библиотек IARXLIB Librarian™. Ассемблерные программы могут быть написаны таким образом, чтобы каж- дый отдельный исходный файл содержал множество модулей, как модулей про- граммы, так и библиотечных. 29.4.1. Библиотеки В изображенной на Рис. 29.2 блочной диаграмме, файл library.mn состоит из некоторого множества (на рисунке — четырех) модулей, каждый из которых, возможно, является результатом работы ассемблера или компилятора. Модуль module_c будет загружаться всякий раз, когда файл library.mn окажется в числе входных файлов компоновщика. Этот модуль запуска библиотек cstartup имеет атрибут PROGRAM, вследствие чего всегда подключается при компоновке проекта на C/C++. Подобный модуль обязательно входит в состав всех про- грамм на C/C++. Остальные модули в файле library.mn имеют атрибут LIBRARY, т. е. являют- ся библиотечными модулями. Библиотечные модули загружаются только в том случае, когда они содержат входы (функции, переменные или другие символы, объявленные как PUBLIC), на которые каким-то способом ссылаются другие загруженные модули. Например, если на входы, содержащиеся в module_e, нет ссылок ни в каком из уже загруженных модулей, module_e загружен не будет. Необходимо отметить, что библиотечный файл является перемещаемым объектным файлом и не имеет принципиальных отличий от перемещаемых объ- ектных файлов, содержащих программы. Атрибуты LIBRARY и PROGRAM, ко- торые имеют эти файлы, лишь определяют условия их загрузки в компоновщик. 29.4.2. Создание библиотек При желании, пользователь может создавать свои собственные библиотеки, или расширять (дополнять) существующие, используя модули на C/C++ или модули ассемблера. Для того, чтобы задать для модуля C/C++ атрибут LIBRARY вместо заданного по умолчанию атрибута PROGRAM, используется
29.5. Сегменты 429 опция компилятора -library_module (или -Ь для некоторых программных про- дуктов IAR). В ассемблерных программах для задания модулю атрибута LIBRARY используется директива MODULE, а для задания атрибута PROGRAM — директива NAME. Убедиться в этом можно, открыв в окне редак- тора файлы Main.s79 и Maxmin.s79 из рассматривавшихся в предыдущей главе проектов projects и tutorlibrary, соответственно. Создавать библиотеки или изменять атрибуты любого модуля можно также с помощью набора библиотек IARXLIB. 29.5. Сегменты После того, как компоновщик IAR XLINK завершает идентификацию мо- дулей, подлежащих загрузке для данной программы, следующая выполняемая им задача заключается в назначении адресов для сегментов кода и данных, ко- торые используются программой. При написании программы на ассемблере, объявление и перечисление пе- ремещаемых сегментов и задание способов их использования возлагается на программиста. В программах на C/C++ эти функции выполняет компилятор, создавая и используя набор предопределенных сегментов кода и данных, а про- граммист только задает пределы объявления и перечисления этих сегментов. Каждый модуль, изначально, содержит части каждого из возможных сег- ментов. Каждая такая часть сегмента может содержать байты кода или данных, а также резервировать пространство в оперативной памяти. Управление адреса- ми, отводимыми под различные сегменты, в компоновщике XLINK осущест- вляется с помощью задания вариантов командной строки (-Z, -Р, -Ь). После за- вершения компоновки модуля, XLINK удаляет из него те части сегментов, ко- торые не были использованы. 29.5.1. Управление сегментами Управление сегментами осуществляется с помощью, так называемых, ко- мандных файлов компоновщика. Эти файлы включают в себя команды управ- ления сегментами, использующие опции компоновщика, предназначенные для управления сегментами. Для управления сегментами, компоновщик IAR XLINK предоставляет при создании командных файлов следующие опции: -Ksegs = inc, count -Ppackdef -Zseg_def -bbankdef -Mrange_def Дубликатный код Определение упакованных сегментов Определение сегментов Определение банкированных сегментов Отображение логических адресов на физические адреса Размещение сегментов с использованием опций -Z и -Р может быть выпол- нено одновременно одной командой, с учетом предыдущих команд размеще- ния. Каждая команда размещения оперирует только той частью диапазона сег- ментов, которая не используется предыдущими командами размещения. Об- ласти памяти могут быть использованы для размещения сегментов, в
430 Глава 29. Универсальный компоновщик IAR XLINKLinker™ соответствии с предыдущими командами размещения, дубликатных сегментов или объектов, помещенных в абсолютные адреса во входных полях. Например, если имеются два сегмента данных (Zl, Z2), которые должны быть размещены в нулевой странице памяти (О-FFh), и три сегмента (Al, А2, АЗ), которые могут быть размещены где-либо в доступной оперативной памяти, то это может быть сделано с помощью следующих команд: -Z(DATA) Zl, Z2=0-FF -Z(DATA) Al, А2, A3=O-1FFF Первая команда разместит сегменты Zl и Z2, начиная с нулевого адреса, и выдаст сообщение об ошибке, если они не помещаются в указанный диапазон. Затем будут размещены сегменты Al, А2, и АЗ, начиная с первого не используе- мого сегментами Z1 и Z2 адреса. Команды с опцией -Р (в отличие от команд с опцией -Z) не обязательно раз- мещают сегменты (или части сегментов) последовательно, а используют для этого свободные области между сегментами, размещенными ранее. По этой причине, опцию -Z следует использовать в случаях, когда необходимо размес- тить сегменты в определенном порядке. Такая необходимость может возник- нуть, когда требуется сохранить переменные и их инициализирующие значения в одинаковом порядке и в одном блоке. 29.5.2. Переадресация Для некоторых выходных форматов, компоновщик XLINK может произвес- ти переадресацию на выходе логических адресов к физическим. Логические ад- реса — это адреса, указанные в программе. Они используются во всех опциях ко- мандной строки XLINK. Обычно эти адреса используются также в выходных объектных файлах, однако путем использования опции -М можно задать в вы- ходном объектном файле отображение логического адреса на физический адрес. 29.5.3. Типы распределения сегментов В Табл. 29.1 перечислены различные типы сегментов, которые могут быть обра- ботаны компоновщиком XLINK. Под обработкой понимается распределение раз- мера сегмента (выделение для него адресного пространства заданного размера). Таблица 29,1, Типы сегментов Тйп сегмента Описание STACK (Стек) По умолчанию распределяется от старших к младшим адресам. Вы- ровненный размер сегмента вычитается из адреса загрузки до того, как ниже размещается предыдущий сегмент RELATIVE (Относительный) По умолчанию распределяется от младших к старшим адресам COMMON (Общий) Все части сегмента расположены по одному и тому же адресу Если в определениях сегментов сегменты стека «смешаны» с относительны- ми или общими сегментами, компоновщик выдаст предупредительное сообще- ние. Однако распределены эти сегменты будут согласно распределению, задан- ному по умолчанию первым сегментом в списке.
29.5. Сегменты 431 Общие сегменты имеют размер, равный наибольшему размеру, объявленно- му для какого-либо частного общего сегмента. Например, если в модуле А объ- явлен общий сегмент COMSEG с размером 4, а в модуле В он же объявлен с размером 5, то этот последний размер и будет распределен для общего сегмента. Относительные сегменты и сегменты стека имеют размер, равный сумме всех объявленных размеров этих сегментов. 29.5.4. Типы сегментов памяти Дополнительный параметр сегмента памяти type <тип) используется, чтобы задать тип для каждого из сегментов в списке. Этот параметр определяет, каким образом компоновщик XLINK будет обрабатывать перекрытия сегментов. Кро- ме того, указание типа сегментов памяти используется компоновщиком для ге- нерации в определенных выходных форматах информации, используемой не- которыми аппаратными эмуляторами и отладчиком C-SPY. Возможные типы сегментов памяти перечислены в Табл. 29.2. (В таблице не указаны типы сегментов, которые поддерживаются XLINK, но не могут ис- пользоваться в микроконтроллерах семейства LPC2000.) Таблица 29.2. Типы сегментов памяти Тйп сегмента Описание BIT Битовая (разрядная) память1 > CODE Память кода CONST Память констант DATA Память данных FAR Данные в FAR-памяти. XLINK не будет помечать доступ в этот сегмент, а часть сегмента, находящаяся около 64-килобайтной границы, будет смещена вверх к началу границы FARC, FARCONST Константа в FAR-памяти. XLINK не будет помечать доступ в этот сегмент, а часть сегмента, находящаяся около 64-килобайтной границы, будет смещена вверх к началу границы FARCODE Код в FAR-памяти HUGE Данные в HUGE-памяти HUGEC, HUGECONST Константа в HUGE-памяти HUGECODE Код в HUGE-памяти IDATA Внутренняя память данных NEAR Данные в NEAR-памяти. При обращении к этому сегменту используется 16-бит- ная адресация. Этот сегмент может быть расположен где-либо в 32-битном адрес- ном пространстве NEARC, NEARCONST Константа в NEAR-памяти UNTYPED Заданный по умолчанию тип XDATA Внешняя память данных ZPAGE Память данных !) Адрес сегмента BIT определен в битах, а не в байтах. Память BIT распределяется первой.
432 Глава 29. Универсальный компоновщик IARXLINKLinker™ 29.5.5. Ошибки перекрытия По умолчанию XLINK проверяет, чтобы различные сегменты, заданные оп- циями размещения сегментов и объявленные определениями сегментов, не на- кладывались друг на друга в памяти. Если такое перекрытие сегментов будет иметь место, XLINK выдаст сообщение об ошибке 24: «Segment segmentl overlaps segment segment2». 29.5.6. Ошибки диапазона Помимо ошибок перекрытия, при компоновке могут иметь место так назы- ваемые ошибки диапазона. Причина их возникновения в том, что некоторые команды процессора не работают, если после завершения компоновки не соб- людены определенные условия. Например, адрес перехода в программе должен лежать в пределах некоторого расстояния от команды перехода, а также должен быть четным. XLINK при компоновке проверяет выполнение всех необходи- мых условий и, если какое-либо из них не соблюдено, генерирует сообщение (или предупреждение) об ошибке диапазона, сопровождаемое описанием этой ошибки. 29.5.7. Примеры размещения сегментов Определить местоположение сегмента кода SEGA начиная с адреса Oh, рас- положив непосредственно за ним сегмент кода SEGB: -Z(CODE) SEGA, SEGB=0 Определить местоположение SEGA вниз от адреса FFFh, расположив SEGB еще ниже его: -Z(CODE)SEGA,SEGB#FFF Распределить сегменты кода SEGA и SEGB: -Z(CODE)SEGA, SEGB=1OO-1FF, 400-6FF, 1000 В этом примере, сегмент SEGA будет помещен между адресами 100h и IFFh, если по своему размеру он может поместиться в этом пространстве. В против- ном случае, XLINK попробует разместить его в диапазоне адресов 4OO...6FFh. Если и этот диапазон окажется недостаточного размера для размещения SEGA, SEGA будет размещен, начиная с адреса 1000h. SEGB будет размещен, согласно тем же самым правилам, после того, как будет размещен SEGA. Если SEGA поместится в диапазон 100...IFFh, то XLINK попробует разместить SEGB в том же диапазоне (после SEGA). В про- тивном случае, SEGB будет размещен в диапазоне 4OO...6FFh, а если он там не поместится, то будет размещен, начиная с адреса 1000h. Сегменты SEGA и SEGB будут размещены в диапазоне адресов 19000h... IFFFFh, но по умолчанию для обращения к данным, содержащимся в этих сегментах, будет использоваться 16-битный способ адресации (т. е. диапа- зон адресов 9000...FFFFh): -Z(NEAR)SEGA, SEGB=19000-lFFFF
29.6. Настройки XLINK в IDE IAR Embedded Workbench 433 29.6. Настройки XLINK в IDE IAR Embedded Workbench Как уже было описано в Главе 25, IDE IAR Embedded Workbench предостав- ляет пользователю удобный интерфейс настроек опций XLINK. При выборе в главном меню IDE пункта Project>Options и последующем вы- боре строки Linker, в списке Category откроется окно отображения страниц оп- ций XLINK (см. Рис. 25.12). На странице Output этого окна можно выбрать тре- буемый формат выходного файла компоновщика. Если включить опцию1) Debug information for C-SPY, то выходной файл XLINK будет содержать инфор- мацию отладки. Если активизировать кнопку Other, то в раскрывающихся списках Output format и Format variant можно выбрать формат выходного файла XLINK под требуемую аппаратную платформу и дополнительно задать его ва- рианты. Следует заметить, что для загрузчика LPC2000 ISP (BootLoader) требу- ется формат выходного файла intel-extended. Для отладчика C-SPY рекоменду- ется включить опции Debug information for C-SPY, With runtime control modules и With I/O emulation modules. Поле Output file можно использовать, если есть необходимость сменить имя и/или расширение выходного файла. На странице Config окна отображения страниц опций XLINK в области Linker command file можно задать путь к используемому командному файлу ком- поновщика с картой памяти выбранного микроконтроллера (с расширением xcl) или, используя открывающую одноименное окно редактирования кнопку Command file configuration tool, вручную создать, редактировать и сохранить ко- мандный файл. Страница #define может содержать дополнительные определения. Страница Diagnostic предназначена для того, чтобы настротиь выдачу ком- поновщиком диагностических сообщений. Страница List предназначена для управления листингом компоновщика. На странице Extra Options можно, в случае необходимости, задать дополни- тельные ключи командной строки компоновщика. 29.6.1. Опции XLINK Опции компоновщика XLINK позволяют управлять его операциями. Эти опции используются с целью: • задания вариантов командной строки после команды xlink; • задания вариантов переменной среды; • задания вариантов командного файла компоновщика (xcl), с возможнос- тью его включения в командную строку. Примечание. В командные файлы компоновщика можно вставлять комментарии, поме- чаемые символами «/* ...♦/» или «//». Все опции компоновщика XLINK перечислены в Табл. 29.3. 1) Кликнув мышью на соответствующем «чек-боксе». (Прим. науч, ред.)
434 Глава 29. Универсальный компоновщик IAR XLINKLinker™ Таблица 29.3. Опции компоновщика XLINK Опция командной строки Описание Разделитель комментария -Afile,... Загрузить как программу -а Отключить статический оверлей -В Всегда генерировать выход -bbank_def Определить банкированные сегменты -Сfile,... Загрузить как библиотеку -ссри Определить тип процессора -Dsymbol=value Определить символ -d Отключить генерацию объектного кода -Efile,... Нет объектного кода -cnew=old[,old]... Переименовать внешние символы -ffile Задать имя файла XCL -G Отключать глобальный контроль соответствия типов -symbol 1 [, symbol2, symbol!,...] Требовать глобальных входов -Mhexstring Заполнить неиспользованную память кода -h[(seg_type)] {range} Заполнить диапазоны -[pathname Включить пути -J size, method!flags] Генерировать контрольную сумму -Ksegs=inc, count Дубликатный код -Ldirectory Показывать в листинге директорию Afile Показывать в листинге имя файла -Mrange_def Отображать логические адреса на физические адреса -n(c] Игнорировать локальные символы -Oformat[,variant] [=filename] Несколько выходных файлов -ofile Выходной файл -Ppack def Определить упакованные сегменты -flines Определить строки/страницу -Q Загрузка вразброс -q Отключить релейную функцию оптимизации -R[w] Отключить проверку принадлежности к диапазону -r Информация отладки -rt Информация отладки с терминальным вводом/выводом -S Silent-операция -s symbol Определить новую прикладную точку входа -U[(address_space)]range=[(address_space)\range Совместное использование адресного пространства -N(type)name[, align] Объявление области настройки для кода и данных - w [n|s|t| ID [ =5ever/7>]] Установить управление диагностикой -x[e][h][i][m][n][s] Определить перекрестную ссылку -N[char] Вариант формата -y[chars] Вариант формата -T\@]seg_def Определить сегмент -z Выдавать предупреждения о наложениях сегментов
29.7. Примеры командных файлов компоновщика 435 29.7. Примеры командных файлов компоновщика В качестве примеров командных файлов компоновщика XLINK, ниже при- ведены файлы LPC2129_FLASH.xcl и LPC2129_SRAM.xcl, предназначенные для использования в проектах на базе микроконтроллера LPC2129. Эти файлы, на- ряду с командными файлами компоновщика для других микроконтроллеров семейства LPC2000, свободно распространяются фирмой-производителем. Ко- мандный файл LPC2129_FLASH.xcl позволяет компоновщику генерировать объектный код, предназначенный для записи во Flash-память микроконтролле- ра LPC2129, а командный файл LPC2129_SRAM.xcl — код, предназначенный для записи в оперативную память (SRAM) LPC2129. Запись кода в SRAM с его последующим выполнением может использоваться разработчиком для отладки пользовательских программ непосредственно «в кристалле», но без расходова- ния ресурса циклов стирания-записи встроенной Flash-памяти микроконтрол- лера. Более подробно о выполнении программного кода в SRAM будет расска- зано в следующей главе. Командный файл компоновщика LPC2129_FLASH.xcl у/************************************************************************ // XLINK шаблон командного файла для EWARM/ICCARM // Использование: xlink -f Inkarm <your_object_file(s)> // -s <program start label> <C/C++ runtime library> // // $Обновление: 1.2 $ /у************************************************************************ / /------------- // Сегменты кода, которые могут быть размещены где-либо в памяти. //-------------- // INTVEC - таблица вектора исключительной ситуации. // SWITAB - таблица вектора программного прерывания. // ICODE - код запуска (cstartup) и исключительной ситуации. // DIFUNCT - динамические векторы инициализации, используемые C++. // CODE - код, сгенерированный компилятором. // CODE-I - код, сгенерированный компилятором и объявленный __ ramfunc // (выполняющийся в RAM) // CODE_ID - инициализатор для CODE_I (ROM). // 11-------------- // Сегменты данных, которые могут быть размещены где-либо в памяти. ц--------------- // CSTACK -е стек, используемый программами на С/С ++ (системный и // непривилегированный режим). // IRQ-STACK - стек, используемый сервисными подпрограммами обработки запросов IRQ. // SVC_STACK - стек, используемый в привилегированном режиме. // (Определите стеки других исключений, если это необходимо для FIQ, АВТ, UND) . // HEAP - динамическая память, используемая в С и удаляемая в C++. // INITTAB - Таблица, содержащая адреса и размеры сегментов, которые должны быть // инициализированы при запуске (cstartup). // CHECKSUM - компоновщик размещает в этом сегменте байт(ы) контрольной суммы,
436 Глава 29. Универсальный компоновщик IAR XLINK Linker™ II когда используется опция -J командной строки компоновщика. // DATA_y - объекты данных. И II Где суффикс _у может быть одним из нижеперечисленных: // _AN - содержит неинициализированные по расположению объекты, т.е. вступает в / / противоречие с абсолютным местоположением, заданным оператором @ или директивой // местоположения #pragma. Содержащиеся в таких сегментах объекты уже имеют / / заданный адрес и не должны быть упомянуты в этом командном файле компоновщика. // _С - константы (ROM). // _1 - инициализированные данные (RAM). // _ID - первоначальное содержание _1 (скопированное в _1 при запуске (cstartup)) // (ROM). // _N - неинициализированные данные (RAM). // _Z - инициализированные нулевыми значениями данные (RAM). И II Замечание: Убедитесь, что использовали конечные значения для определенных // адресных интервалов. //В противном случае, компоновщик может распределить адресное пространство вне // предназначенных для этого диапазонов памяти. /у************************************************************************ /у************************************************************************ // Сообщение компоновщику об используемом семействе центрального процессора. I/************************************************************************ -сагш /у************************************************************************ // Размещение сегментов - общая информация // // Все числа в приведенных ниже командных строках размещения сегментов // интерпретируются, как шестнадцатеричные, если им непосредственно не // предшествует знак ' . ' , который обозначает представление десятичных чисел. // // При определении размещения сегмента с использованием опции -Р вместо опции -Z // компоновщик произвольно разбивает каждый сегмент на части и беспорядочно // размещает эти части в пределах заданных диапазонов, чтобы обеспечить наиболее // эффективное использование памяти. При этом, однако, невозможно найти начальный // или конечный адрес (используемый операторами ассемблера .sfb./.sfe.) сегмента, // который был разбит и преобразован. И II Опция -М компоновщика очень полезна при генерации выходного файла, который // должен использоваться для программирования внешних устройств ROM/Flash // // (см. xlink.pdf для уточнения подробностей). /у************************************************************************ II ROMSTART/END - область, где будет находиться CODE. // Сегменты только для чтения, отображенные в ROM. /у************************************************************************ // Для отладки во Flash -DROMSTART=0 -DROMEND=3FFFF I / *******************•***•*•***•***•**•*•****•**•*•*•******•*•**•*•*••*•*•***•*•**•*•**•*•*•*•******•*• // Адресный интервал для векторов сброса и исключительной ситуации // (INTVEC). // Векторная область - 32 байта.
29.7. Примеры командных файлов компоновщика 437 // Дополнительные 32 байта распределены для // таблицы констант, используемой Idr PC в cstartup.s79. /у************************************************************************ -Z (CODE) INTVEC=00-3F //************************************************************************ // Код запуска и подпрограммы исключительной ситуации (ICODE). /у************************************************************************ - Z (CODE) ICODE, DIFUNCT=ROMSTART-ROMEND - Z (CODE) SWITAB=ROMSTART-ROMEND I у************************************************************************ // Сегменты кода могут быть помещены в любом месте. /у************************************************************************ -Z (CODE) CODE=ROMSTART-ROMEND //************************************************************************ // Первоначальное местоположение ROM для скопированного кода _____ ramfunc //и выполняемого в RAM. /у************************************************************************ - Z (CONST) CODE_ID=ROMSTART-ROMEND /у************************************************************************ // Различные константы и инициализаторы. //************************************************************************ -Z(CONST)INITTAB,DATA_ID,DATA_C=ROMSTART-ROMEND - Z (CONST) CHECKSUM=ROMSTART-ROMEND //************************************************************************ // Сегменты для чтения - записи, отображенные в RAM. у/************************************************************************ // Все данные помещены достаточно высоко в области старрших адресов, чтобы // освободить для программы 12К (если она также находится в оперативной памяти) -DRAMSTART=40000000 -DRAMEND=40003FFF // Истинно для всех 1бк SRAM //************************************************************************ // Сегменты данных. //************************************************************************ -Z(DATA)DATA_I,DATA_Z,DATA_N=RAMSTART-RAMEND I /*****1'1<**1'*1'1'**1'1'1'1'1'*1'1'1'****1'******1'1'***************-к-к-к-к*-к-к-к-к-к-к-к-к-к-к-к-к-к-к1' // __ ramfunc - код, скопированный и выполняемый в RAM. //************************************************************************ -Z (DATA) CODE_I=RAMSTART-RAMEND /у************************************************************************ 11 ICCARM генерирует код для функции __ ramfunc в сегменте CODE_I. Опция -Q // командной строки XLINK переориентирует XLINK, чтобы вместо него задать // сегмент CODE_ID, но сохранять символьную и отладочную информацию, // связанную с сегментом CODE_I, где выполняется код. -QCODE_I=CODE_ID /у************************************************************************ // Стек и сегменты динамической памяти. // (Обратите внимание на маленький стек для мобильности отладки) //************************************************************************ -D_CSTACK_SIZE=200 // -D_SVC_STACK_SIZE=10 -D_IRQ_STACK_SIZE=100 -D_HEAP_SIZE=200
438 Глава 29. Универсальный компоновщик IAR XLINK Linker™ -Z (DATA) CSTACK+_CSTACK_SIZE=R/kMSTART-RAMEND // -Z(DATA)SVC_STACK+_SVC_STACK_SIZE=RAMSTART-RAMEND -Z(DATA)IRQ_STACK+_IRQ_STACK_SIZE,HEAP+_HEAP_SIZE=RAMSTART-RAMEND /y************************************************************************ // Поддержка ELF/DWARF. // //He комментируемая строка "-Felf" ниже предназначена, чтобы генерировать // выход ELF/DWARF. // Спецификаторы доступного формата: И // "-уп": Подавить вывод отладки DWARF. // "-ур": Множественные ELF секции программы. // "-yas": Формат, подходящий для отладчиков от ARM Ltd (также устанавливает // флаг -р) И II Строка " -Felf" и спецификаторы формата могут быть заданы непосредственно как // опции командной строки, или выбраны в списочной строке XIink Output в // PAR Embedded Workbench. //-Felf Командный файл компоновщика LPC2129_SRAM.xcl I /************************************************************************ // XLINK шаблон командного файла для EWARM/ICCARM // Использование: xlink -f Inkarm <your_object_file(s)> // -s <program start label> <C/C++ runtime library> // // $Обновление: 1.2 $ I /ii********************************************************************** II Сообщение компоновщику об используемом семействе центрального процессора. -carm //************************************************************************ // ROMSTART/END - область, где будет находиться CODE. // Сегменты только для чтения, отображенные в ROM. II Для отладки в RAM -DROMSTART=40000040 -DROMEND=40003FFF /у************************************************************************ // Адресный интервал для векторов сброса и исключительной ситуации // (INTVEC). // Векторная область - 32 байта. // Дополнительные 32 байта распределены для // таблицы констант, используемой Idr PC в cstartup.s79. /у************************************************************************ - Z (CODE) INTVEC=40000000-4000003F I у************************************************************************ // Код запуска и подпрограммы исключительной ситуации (ICODE). /у************************************************************************ - Z (CODE) ICODE, DIFUNCT=ROMSTART-ROMEND
29.7. Примеры командных файлов компоновщика 439 - Z (CODE) SWITAB=ROMSTART-ROMEND у у************************************************************************ // Сегменты кода могут быть помещены где-либо в свободной области памяти, у у************************************************************************ -Z (CODE) CODE=ROMSTART-ROMEND у у************************************************************************ // Первоначальное местоположение ROM для скопированного и выполняемого в RAM // кода ___ ramfunc //. у у************************************************************************ -Z (CONST) CODE_ID=ROMSTART-ROMEND у у************************************************************************ // Различные константы и инициализаторы. - Z(CONST)INITTAB,DATA_ID,DATA_C=ROMSTART-ROMEND - Z (CONST) CHECKSUM=ROMSTART-ROMEND yy************************************************************************ // Сегменты для чтения - записи, отображенные в RAM. у у************************************************************************ -DRAMSTART=40000040 -DRAMEND=40003FFF у у************************************************************************ // Сегменты данных. у у************************************************************************ - Z(DATA)DATA-I,DATA_Z,DATA_N=RAMSTART-RAMEND yy************************************************************************ // _ ramfunc код, скопированный и выполняемый в RAM. у у************************************************************************ - Z (DATA) СОDE_I =RAMSTART-RAMEND yy************************************************************************ // ICCARM генерирует код для функции _ ramfunc всегменте CODE_I. Опция -Q // командной строки XLINK переориентирует XLINK, чтобы вместо него задать // сегмент CODE_ID, но сохранять символьную и отладочную информацию, // связанную с сегментом CODE_I, где выполняется код. у у************************************************************************ -QCODE_I=CODE_ID у у************************************************************************ // Стек и сегменты динамической памяти. (Обратите внимание на маленький стек // для мобильности отладки) у у************************************************************************ -D_CSTACK_SIZE=200 / / -D_SVC_STACK_SIZE=10 -d_irq_stack_size=ioo -D_HEAP_j3lZE=200 -Z(DATA)CSTACK+_CSTACK_SIZE=RAMSTART-RAMEND II -7ЛDATA)SVC_STACK+_SVC_STACK_SIZE=RAMSTART-RAMEND -Z(DATA)IRQ_STACK+_IRQ_STACK_SIZE,HEAP+_HEAP_SIZE=RAMSTART-RAMEND yy************************************************************************ // Поддержка ELF/DWARF. yy************************************************************************ //-Felf
440 И Глава 29. Универсальный компоновщик IAR XLINKLinker™ Как можно видеть из текстов файлов, в файле LPC2129_FLASH.xcl объяв- ленные адреса границ постоянной памяти ROM (ROMSTART и ROMEND) «покрывают» всю имеющуюся встроенную Flash-память микроконтроллера, в то время как в файле LPC2129_ SRAM.xcl эти значения указывают на адресное пространство SRAM (см. главу 2 «Организация системной памяти»). В файле LPC2129_FLASH.xcl объявленные адреса границ оперативной памяти RAM (RAMSTART и RAMEND) «покрывают» всю имеющуюся встроенную опера- тивную память микроконтроллера, в то время как в файле LPC2129_ SRAM.xcl из объявленных границ RAM исключена область, отведенная в реальной встро- енной RAM под вектора сброса и исключительной ситуации (INTVEC).
ГЛАВА 30 ОТЛАДКА ПРИЛОЖЕНИИ В ЦЕЛЕВОЙ СИСТЕМЕ Входящий в состав IDE IAR Embedded Workbench отладчик IAR C-SPY Debugger, наряду с отладкой в режиме симуляции, может быть использован для отладки непосредственно в «железе», т. е. в составе целевой системы. Блок-схе- ма, демонстрирующая общую структуру отладчика IAR С-SPY Debugger и спо- собы его взаимодействия с целевой системой, изображена на Рис. 30.1. Целевая система может состоять из аппаратных средств оценочной (эволюционной) платы или аппаратных средств конкретного пользовательского устройства. Це- левая система может также полностью или частично моделироваться програм- мным обеспечением. Для каждого отдельного типа целевой системы может ис- пользоваться специализированный драйвер С-SPY. Прикладное программное обеспечение — поставляется IAR и сторонними производителями Рис, 30.1. Взаимодействие отладчика С-SPY Debugger и целевой пользовательской системы В рамках данной книги, будет рассматриваться вариант отладки в целевой системе, при котором пользовательская прикладная программа выполняется в SRAM микроконтроллера (в нашем случае — микроконтроллера LPC2000). Для загрузки программы в SRAM и ее корректного выполнения необходимо соблю- дение двух основных условий. 1. Использование соответствующего командного файла компоновщика. На- пример, для микроконтроллера LPC2129 следует использовать файл LPC2129_ SRAM.xcl, о котором шла речь в предыдущей главе. На Рис. 30.2, для проекта на базе микроконтроллера LPC2129, приведен пример страницы Config компонов- щика XLINK с заданным командным файлом компоновщика.
442 Глава 30. Отладка приложений в целевой системе Options for node Mlcd_knop' Category: General Options C/C++ Compiler Assembler Custom Build Build Actions Linker Debugger Simulator Angel IAR ROM-monitor J-Link Macraigor RDI Third-Party Driver Output j Extra Output | ^define | Diagnostics! List Linker command file-----------------------— R Override default • ф| Command file configuration tool Г* Override default program entry C Defined by application Search paths: (one per line] |$TOOLKIT_DIR$\LIB\ Factory Settings Config | Proce < ] ►, Raw binary File Symbol: Segment: Align: OK I Cancel Puc. 30.2. Пример задания командного файла компоновщика для выполнения программы в SRAM 2. Корректная инициализация специального регистра МЕММАР, который управляет переотображением в адресном пространстве памяти векторов преры- ваний LPC2000. Для выполнения программы в SRAM, регистр МЕММАР дол- жен быть инициализирован значением 2. Разумеется, помимо перечисленных условий, необходимо подключить к це- левой системе хост с отладчиком, а также соответствующим образом настроить аппаратные средства отладчика. 30.1. Аппаратные средства отладчика C-SPY Как правило, отладчик IAR C-SPYсостоит из общей части, которая обеспечива- ет основной набор операций отладки, и драйвера (драйверов). Драйвер C-SPY обес- печивает сопряжение с целевой системой и управление ею. Драйвер C-SPY имеет пользовательский интерфейс в виде специального меню, окон и диалоговых окон, отображающих определенные функции целевой пользовательской системы. На момент написания этой книги, отладчик IAR C-SPY Debugger был досту- пен со следующими драйверами: • драйвер симулятора; • драйвер RDI (удаленный интерфейс отладки); • драйвер J-Link JTAG-интерфейса;
30.1. Аппаратные средства отладчика C-SPY 443 • драйвер Macraigor JTAG-интерфейса; • драйвер отладочного монитора Angel; • драйвер IAR ROM-монитора. Если на компьютере установлены два и более драйвера C-SPY, можно произво- дить переключение между ними, выбирая нужный драйвер внутри IAR Embedded Workbench (окно Options, категория Debugger, страница Setup, поле Driver). Ввиду того, что объем этой книги не позволяет подробно рассказать обо всех типах драйверов IAR C-SPY, остановимся на описании наиболее распро- страненного драйвера JTAG-интерфейса Macraigor (по названию фирмы-про- изводителя), с помощью которого в дальнейшем нами будет производиться от- ладка пользовательских приложений и их загрузка в память микроконтроллера LPC2000. Этот драйвер позволяет задавать некоторое ограниченное количество точек останова кода и контрольных точек данных, а также производить выпол- нение кода в реальном времени с обработкой прерываний. Драйвер Macraigor не занимает места в памяти микроконтроллера. В отличие от симулятора С- SPY, Macraigor не позволяет симулировать прерывания и вести счет програм- мным циклам при выполнении кода, а также не дает возможности «охватывать» при отладке весь выполняемый код. Блок-схема, отображающая структуру сопряжения хоста с целевой пользо- вательской системой при использовании драйвера JTAG-интерфейса Macraigor, приведена на Рис. 30.3. Рис. 30.3. Блок-схема сопряжения хоста с целевой системой через драйвер Macraigor Драйвер IAR C-SPY Macraigor может соединяться со встроенным интерфей- сным модулем JTAG микроконтроллера через аппаратные интерфейсы (кабели) Wiggler или mpDemon. Нами будет использоваться интерфейс Wiggler. Принци- пиальная схема одного из возможных исполнений интерфейса Wiggler приведе- на в Приложении 5. Он выполнен в виде кабеля и подключается к параллельно- му порту компьютера хоста. Используемый драйвером Wiggler интерфейс JTAG микроконтроллера — стандартное встроенное отладочное подключение, до- ступное в большинстве устройств ARM, в том числе и в микроконтроллерах се- мейства LPC2000.
444 Глава 30. Отладка приложений в целевой системе Options for node "tim“ Category: General Options C/C++ Compiler Assembler Custom Build Build Actions Linker Factory Settings Setup | Download | Extra Options | Plugins | Driver R Run to [Macraigor 3 [main Debugger Simulator Angel IAR ROM-monitor J-Link Macraigor RDI Third-Party Driver - Setup macros---- Г Use macro file - Device description file--------- Г Override default [ггоБ1ЙГ5|А$хсомпомо1р^1На5 Puc, 30,4. Задание драйвера Macraigor отладчика Для задания драйвера отладчика C-SPY в меню IAR Embedded Workbench следует выбирать Project>Options. В открывшемся окне Options следует выбрать категорию Debugger, после чего в этой категории откроется страница Setup, как изображено на Рис. 30.4, Выбор драйвера для отладчика производится в поле Driver этой страницы. Для работы с кабелем Wiggler, необходимо выбрать Macraigor. Для настройки выбранного драйвера JTAG Macraigor, следует в окне Options выбрать категорию Macraigor, после чего в этой категории откроется од- ноименная страница, как изображено на Рис. 30.5. В этой странице присутству- ют следующие поля: • OCD Interface device — выбор устройства JTAG конвертера. В нашем слу- чае, выбираем Wiggler. • JTAG speed — скорость обмена хоста с микроконтроллером через отла- дочный интерфейс JTAG. Задаваемое в этом поле значение должно ле- жать в диапазоне 1...8. Чем больше число в этом поле, тем меньше ско- рость. Как правило, кабель Wiggler хорошо работает при скорости, соответствующей 1, а для кабеля mpDemon может потребоваться значе- ние 2 или 3. В случае неустойчивой связи хоста с микроконтроллером скорость обмена рекомендуется уменьшить. • Hardware reset — установка этой опции разрешает не только сбрасывать микроконтроллер командой через JTAG, но и генерировать импульс на вхо- де аппаратного сброса процессора (по умолчанию эта опция не выбрана).
30.1. Аппаратные средства отладчика C-SPY 445 • JTAG Scan chain with multiple targets — эта опция разрешает настройку на нужное устройство в случае, если к JTAG подключено несколько различ- ных устройств (по умолчанию эта опция не выбрана). Если опция уста- новлена (выбрана), то в расположенном чуть ниже поле необходимо ввести строку идентификации устройства. • Log Communication — эта опция разрешает протоколирование сеанса свя- зи с записью в файл. В случае включения этой опции, в расположенном чуть ниже поле необходимо задать имя файла протокола. • Port, TCP/IP, Baud rate — настройки параметров связи для выбранного интерфейсного устройства. Для Wiggler доступен только LPT-порт. Options for node ”tim" [X | Category General Options C/C++ Compiler Assembler Custom Build Build Actions Linker Debugger Simulator Angel IAR ROM-monitor J-Link Factory Settings Macraigor RDI Third-Party Driver Macraigor | OCD interface device | Wiggler 3 Г Hardware reset Delay after reset [msj- | Г" JTAG scan chain with multiple targets Debug handler address Г Log communication JTAG speed ТСРЛР ' Pgrt |LPT2 3 gaud rate |l15200 3 OK Cancel Puc. 30.5. Окно настроек драйвера Macraigor Прежде, чем использовать подключаемые через параллельный порт аппа- ратные драйверы Macraigor (в частности, Wiggler), необходимо установить на компьютер хоста программные драйверы Macraigor или OCDemon (программа Macraigor JTAG drivers). Эти драйверы входят в состав IDE IAR Embedded Workbench и могут быть установлены из начального загрузочного меню IDE (см. Рис. 30.6). Окно настройки CONNection Dialog установленной программы Macraigor JTAG drivers изображено на Рис. 30.7. Следует заметить, что парамет- ры подключенного интерфейсного устройства, заданные в этом окне (OCD Interface Device (Wiggler), порт хоста Connection (LPTn), скорость обмена через JTAG OCD Speed), должны совпадать с соответствующими параметрами, задан- ными в опциях Debugger и Macraigor C-SPY.
446 Глава 30. Отладка приложений в целевой системе Welcome to the united world of IAR. IAR Embedded Workbench® Evaluation for ARM Ouick&tart installation Wor motion X® Install the IAR Embedded Workbenchш Q View the release notes View the product doenmentMinn ,jl InMall the Adobe Acrobat Reader Install hardware debugger drivers on your computer •IAR WfMqIIw Diffe^rtcArchftectiirw.OneSolottorK Д™ Puc. 30.6. Загрузочное меню IDE IAR EWARM, в котором выделена позиция запуска инсталляции драйверов отладчика CONNection Dialog Target Processor: (arm 3 |aRM7xxx г M ultiple “™ r- Connection... ™ । [“ I [LPT2 3 I AI3.P' I "" E thernet Addresses ....~ |PAdd. Port рбосП □CD Interface Device: | higgler S peed Baud | 384D0 3 | □CD Speed p I P Start with Logging on P Pop-up API errors f..jZ'Oicll X Cancel | Puc. 30.7. Окно настройки драйвера Macraigor
30.2. Отладка с помощью аппаратных средств С-SPY 447 Примечание. Рекомендуется в BIOS компьютера хоста сконфигурировать параллельный порт LPTn в режиме ЕРР, поскольку это наиболее быстрый режим. В других возможных режи- мах порт будет работать медленнее. Перед началом отладки следует убедиться, что на вывод Р0.14 микроконт- роллера LPC2000 целевой системы подан внешний НИЗКИЙ уровень, напри- мер, с помощью перемычки. Кроме того, линия RTCK интерфейсного подклю- чения JTAG целевой системы также должна быть подключена к НИЗКОМУ уровню (через резистор сопротивлением 10 кОм). 30.2. Отладка с помощью аппаратных средств C-SPY 30.2.1. Старт отладчика Старт отладчика IAR C-SPY Debugger производится с предварительно загру- женным в IAR EWARM пользовательским приложением. Для старта сеанса от- ладки следует выбрать Project>Debug (либо нажать кнопку Debugger в инстру- ментальной панели). Следует заметить, что для драйвера Macraigor типичной является ситуация, когда хосту с первой попытки не удается установить связь с целевой системой через JTAG, о чем сигнализирует появление сообщения, изображенного на Рис. 30.8. В этом случае придется 1-2 раза «кликнуть» на кнопке Повтор, чтобы инициировать повторную попытку загрузки программы в SRAM микроконтроллера. Ход успешно начавшегося процесса загрузки поль- зовательской программы в SRAM графически отображается в виде шкалы, как показано на Рис. 30.9. После перехода в режим отладки, в дополнение к окнам, уже открытым в IAR Embedded Workbench, пользователю станет доступен набор специфических окон IAR C-SPY Debugger (Рис. 30.10). JTAG Driver JTAG Error: No contact with the JTAG interface Check the cable and power. By pressing IGNORE a retry without re-initialization is made Прервать f iloBjgpJj Пропустить Puc, 30,8, Сообщение о неудачной попытке установить связь через JTAG с целевой системой Рис, 30.9. Процесс загрузки пользовательской программы в SRAM
448 Глава 30. Отладка приложений в целевой системе z ’ IAR Fmbefhled Woikbenc h IDF EJ&llxl £ite Edit Jjiew Reject Qebug Disassembly 21 AG look ft^dow H₽lp “3 VV 7 I al X Л: Deb^~ main]hardw& f hardware_______. _______,__________________________ ® .# include <iolpc2129.h> // подключение стандартных заголовков и опр^ "hardware.h" // подключение специальных заголовков и опрт 4000084С 4000084Е 40000850 40000852 40000854 40000856 8010 W: Е002 8014 Е002 801С Е002 □ |E)lcd_kno... v* -S d) hardwa. — Ю hardwa.. -El Ц1 knop.c *43 В Output volatile extern U8 ClagnJmO, flagnjinl, flagn_kn2, flagn_kn3; static U8 ledl_old_state=0; static U8 led2_old_state-0; static U8 simw=1''; •v’void main (void) CPUinit(); //инициализауия системи __disable_interrupt(); //запрет прерываний INTERRUPTSinit(); //инициализация прерываний й£Ш1:.............................::...i Next label is a T min: Ф 40000858 8500 4000085A F7FF 4000085C FC61 4000085Ё FOOD 40000860 F93F Log * Ц Sun Apr 23 22.46 18 2006.2786 bytes downloaded (1.08 Kbytes/sec) jl Sun Apr 23 22:46 18 2006. Loaded debugee- C \Pr_ARM\PROEKT\LCD_KNOP\Debug\Exe\lcd_knop.d79 W В Sun Apr 23 22 46:20 2006’ Target reset Ц Sun Apr 23 22.46 20 2006: Driver does not support code coverage. Д Debug Log | Od ” ' Г” ' ' ' ' ' ” ................ .......... C:\Pr JtRM\PROEKTV.CD KI40P\main.c........................................................................ 7 "J Г~"" z; Puc. 30.10. Сеанс отладки в целевой системе При отладке в целевой системе, как и при отладке в режиме симуляции, ко- манды отладчика Step Over и Step Into позволяют выполнять пользовательское приложение в пошаговом режиме. Выполненная команда Step Over демонстри- рует передачу управления с заходом его «внутрь» функций или вызовов подпро- грамм, а при выполнении команды Step Into передача управления каждой фун- кции демонстрируется как один-единственный шаг без захода «внутрь» функ- ции. Для выполнения программы в SRAM в реальном времени, следует выбрать в меню Debug>Go (либо нажать кнопку Go на инструментальной панели). Именно в таком темпе (или чуть медленнее) программа будет выполняться в це- левой системе после ее записи во Flash-память микроконтроллера. Когда приложение выполняется, кнопка Break на инструментальной па- нели отладки подсвечивается красным цветом. Остановить выполнение про- граммы приложения можно, «кликнув» на кнопке Break (либо выбрать в ме- ню Debug>Break). Выход из C-SPY производится при выборе в меню Debug>Stop Debugging (либо при нажатии кнопки Stop Debugging на инстру- ментальной панели). Мониторинг памяти (SRAM) и мониторинг регистров при отладке в целе- вой системе, производится так же, как и мониторинг SRAM и регистров при от- ладке в режиме симулятора (см. раздел 25.4 «Отладка приложения в режиме си- муляции»). Однако для отображения реального содержимого SRAM целевой системы отладчику потребуется гораздо больше времени, поскольку требуемые данные поступают из микроконтроллера через JTAG. Таким образом, разница в скорости работы отладчика при симуляции и при отладке в «железе» сразу ста- новится заметной для пользователя.
30.2. Отладка с помощью аппаратных средств С-SPY 449 30.2.2. Задание контрольных точек в целевой системе После старта сеанса отладки с драйвером Macraigor, в меню отладчика до- бавляется подменю JTAG (Рис. 30.11). Это подменю содержит команды, позво- ляющие задавать контрольные точки JTAG и устанавливать контрольные точки на векторах исключительных ситуаций. C-SPY Debugger задает в программе контрольные точки, используя функциональные возможности, обеспечивае- мые встроенной в микроконтроллеры LPC2000 макроячейкой ARM EmbeddedICE™. Эта макроячейка входит в состав каждого процессорного ядра ARM, поддерживающего интерфейс JTAG. Компаратор EmbeddedICE произво- дит в реальном времени сравнение состояний адресной шины, шины данных, управляющих сигналов центрального процессора и внешних входных сигналов с заданными значениями установленных контрольных точек. Если операция сравнения дает результат «Истина» (TRUE), происходит останов программы. При работе с памятью, доступной для чтения и записи, отладчику достаточно одной контрольной точки для создания одной точки останова. При работе с па- мятью, доступной только для чтения, отладчику требуются две контрольные точки, чтобы создать одну точку останова. Макроячейка ARM EmbeddedICE позволяет создавать две контрольные точки. Чтобы определить контрольные точки JTAG, следует выбрать в меню JTAG>Watchpoints, после че- го откроется диалоговое окно JTAG Watchpoints, изображенное на Рис. 30.12. Это диалоговое окно позволяет непосредственно управлять аппаратными средствами двух модулей контрольных точек. Для задания параметров каждой из двух контрольных то- чек, в окне имеются области Address и Data. В поле Value области Address следует ввести тре- буемый адрес контрольной точки. Поле Mask облас- ти Address служит для того, чтобы указать, какие из адресных битов будут ис- пользованы при сравнении, а какие нет (замаскированы). Если какой-либо бит в маске задан нулевым, то соответствующий бит в значении адреса будет игно- рироваться при сравнении. Чтобы в сравнении участвовали все биты адреса, следует задать значение маски равным OxFFFFFFFF. В поле Address Bus Pattern представлено результирующее двоичное значение адресной шины, которое используется компаратором адресов для сравнения. Игнорируемые компаратором биты, которым соответствуют нулевые биты мас- ки, показаны в шаблоне как «х». В области Access Туре можно задать тип доступа, при котором будет произ- водиться сравнение с целью обнаружить совпадение: любой тип доступа, до- ступ при выборке кода операции (команды), доступ для чтения данных, доступ для записи данных, доступ для чтения или записи данных. В области Data можно задать тип данных, используемый при сравнении: байт, слово, полуслово. Если используется опция Any Size, то маска должна быть установлена в интервале 0...0xFF, так как более старшие биты на шине данных могут содержать, в зависимости от команды, случайные данные. Поля Mask и Data Bus Pattern выполняют в области Data те же функции, что и одно- именные поля в области Address. Поле Extern используется, чтобы определить состояние внешнего входа. Ес- ли в этом поле выбрана опция Any, то состояние внешнего входа игнорируется. 304 Watchpoints Vector Catch .. > Breakpoint Usage... Puc. 30.11. Подменю JTAG в меню отладчика после старта сеанса отладки
450 Глава 30. Отладка приложений в целевой системе JTAG Watch points fX| P Watchpoint 0 Break Condition-------------------------------- <•“ Normal: Watchpoint 0 OR Watchpoint 1 Г Range: Watchpoint DAND NOT Watchpoint 1 C Chain: Watchpoint 1 AND THEN Watchpoint 0 Cancel | Value j0x40000302 3 Mask JchFFFFfF- Address B us Pattern [mooobooooobooooo^^ Any Г OP Fetch Г Read C Write Г R/W r Any Size Value foioOOOOOOO 3 Г Byte Mask (oxOOOOFFFF 3 Г word ________ Data Bus Pattern________. fxxx^ Any C 0 Г 1 <• Any C User C Non User Г~ Watchpoint 1 Value [cSbSSiS TJ Mask pSonoeono 3 Address Bus Pattern [xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Data Bus Pattern Ixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Value Mask |SS«m5o 3 Puc. 30.12. Задание контрольных точек JTAG Опциональное поле Mode используется, чтобы определить, в каком режиме работы центрального процессора будут отслеживаться совпадения. Так, если в этом поле выбрать опцию User, то центральный процессор должен работать в режиме USER, чтобы совпадение (если оно имеет место) было зафиксировано. В случае выбора опции Non User, центральный процессор для совпадения дол- жен работать в режимах SYSTEM SVC, UND, ABORT, IRQ или FIQ. Если же выбрана опция Any, то информация о режиме процессора игнорируется. В поле Break Condition можно задать, каким образом будут использоваться определенные ранее контрольные точки. При установке опции Normal, две кон- трольные точки используются по отдельности. При установке опции Range, контрольные точки объединены, чтобы охватить диапазон, в котором конт- рольная точка 0 определяет начало, а контрольная точка 1 — конец. Число, оп- ределяющее размер выбираемого диапазона, должно равняться двойке, возве- денной в некоторую степень. При установке опции Chain, переход управления на контрольную точку 1 автоматически вызовет задание контрольной точки 0 («спусковой механизм»). Останов программы произойдет при переходе управ- ления на контрольную точку 0. Например, чтобы вызвать «спусковой механизм» при доступе в диапазоне 0x20...OxFF необходимо задать следующие установки: 1. В поле Break Condition установить опцию Range. 2. Для Watchpoint 0 задать значение 0, а маску OxFF. 3. Для Watchpoint 1 задать значение 0, а маску 0х1Е
ГЛАВА 31 ЗАПИСЬ ПОЛЬЗОВАТЕЛЬСКИХ ПРОГРАММ ВО FLASH-ПАМЯТЬ МИКРОКОНТРОЛЛЕРОВ В предыдущей главе был описан способ отладки пользовательских про- грамм, состоящий в записи программы в SRAM с ее последующим выполнени- ем. Однако для создания законченного пользовательского проекта, отлажен- ную таким образом программу необходимо все-таки записать во Flash-память микроконтроллера. «Заливка» пользовательской программы во Flash-память LPC2000, принципиально осуществима двумя способами: программированием Flash-памяти через встроенный интерфейс JTAG средствами отладчика C-SPY (или отладчиков других IDE), либо программированием Flash-памяти через порт UARTO средствами встроенного загрузчика bootloader LPC2000 (ISP-про- граммирование). Записать программу во Flash-память через JTAG можно, если вместе с про- граммой написать собственный промежуточный загрузчик, который будет ис- полняться в SRAM и организует запись самой программы во Flash-память. Таким образом действует, например, отладчик C-SPY, о чем будет рассказано ниже. Для облегчения возможности ISP-программирования Flash-памяти микро- контроллеров LPC2000 через UARTO средствами bootloader, компания NXP свободно распространяет компьютерную программу LPC2000 Flash Utility, ра- ботающую под ОС Windows Microsoft и использующую для программирования Flash-памяти LPC2000 последовательный порт компьютера хоста. Описание возможностей LPC2000 Flash Utility будет приведено ниже. Описание особен- ностей режима ISP-программирования Flash-памяти, реализованного в LPC2000 Flash Utility, а также алгоритмов работы загрузчика, можно найти в ма- териалах [5]. Примечание. В исходном тексте пользовательской программы, которую планируется за- грузить во Flash-память, и которая до этого загружалась в целях отладки в SRAM, необходимо соответствующим образом скорректировать константу инициализации специального регист- ра МЕММАР, управляющего переотображением в адресном пространстве памяти векторов прерываний (см. главу 2 «Организация системной памяти»). 31.1. Загрузка Flash-памяти с помощью LPC2000 Flash Utility Код встроенного загрузчика Flash-памяти bootloader выполняется при каж- дом сбросе или включении питания микроконтроллера, поскольку точка входа в bootloader расположена по адресу вектора сброса 0x00. В момент сброса загруз- чик производит выбор из двух альтернативных возможностей: определить такто- вую частоту микроконтроллера и затем выполнять обработчик команд ISP-npo- граммирования или передать управление пользовательскому прикладному коду. Для запуска обработчика команд ISP-программирования, должен быть сформирован соответствующий внешний аппаратный запрос. В качестве тако-
452 Глава 31. Запись пользовательских программ во Flash-память микроконтроллеров го запроса выступает наличие во время сброса внешнего НИЗКОГО уровня на выводе микроконтроллера Р0.14. В процессе сброса, bootloader производит оп- рос состояния этого вывода. На определение наличия запроса и принятие ре- шения загрузчику может потребоваться интервал времени до 3 мс. Если на Р0.14 подан внешний НИЗКИЙ уровень, но установлен флаг переполнения сторожевого таймера микроконтроллера, то внешний аппаратный запрос будет проигнорирован. В случае, когда внешний аппаратный запрос не сформирован или проигнорирован, загрузчик приступает к поиску действительной пользова- тельской программы. Если действительная пользовательская программа будет найдена, то ей будет передано управление. В противном случае, загрузчик вызо- вет подпрограмму подстройки скорости обмена Auto-Baud для определения (уточнения) тактовой частоты микроконтроллера, после чего начнется выпол- нение обработчика команд ISP-программирования. Описанный алгоритм име- ет некоторые вариации, суть которых можно уточнить в [5]. С целью исключения возможности случайного входа в режим ISP-програм- мирования микроконтроллера LPC2000, необходимо предусмотреть на выводе Р0.14 наличие внешнего подтягивающего к «плюсу» питания резистора, пос- кольку после сброса этот вывод находится в высокоимпендансном состоянии. Перечень команд, поддерживаемых обработчиком команд ISP-программи- рования, приведен в Табл. 20.6. Для осуществления операций с ОЗУ и Flash-па- мятью нет необходимости вводить эти команды вручную с помощью какой-ли- бо терминальной программы, поскольку программа LPC2000 Flash Utility пре- доставляет для них удобную графическую оболочку. Главное окно программы LPC2000 Flash Utility с параметрами, заданными по умолчанию, изображено на Рис. 31.1. Из главного окна LPC2000 Flash Utility с Flash-памятью микроконтроллеров семейства LPC2000 могут быть произведе- ны следующие операции: запись в Flash-память выбранного файла с расшире- нием hex — опция Upload to Flash, стирание Flash-памяти — опция Erase, про- верка, очищена ли Flash-память полностью — опция Blank Check, верификация Flash-памяти — опция Compare Flash. Стирание и проверка качества очистки могут производиться как для всей Flash-памяти микроконтроллера целиком, так и для выбранной области, с возможностью задания начального и конечного секторов этой области (поля Start Sector, End Sector). Помимо этого, из главно- го окна может производиться чтение идентификационного номера (поле Part ID) микроконтроллера LPC2000 и номера версии встроенного загрузчика bootloader (поле Boot Loader ID) с помощью опции Read Device ID. В случае, если в используемом аппаратном интерфейсе RS-232, относящем- ся к внешней «обвеске» микроконтроллера LPC2000, линия DTR через соот- ветствующую цепочку согласования уровней подключена ко входу RESET мик- роконтроллера, то при выборе в главном окне программы опции Use DTR/RTS for Reset and Boot Loader Selection появляется возможность с помощью LPC2000 Flash Utility производить «ручной» сброс LPC2000 (опция Manual Reset) и за- пуск загруженной в память программы на выполнение непосредственно после загрузки (опция Execute Code after Upload). Кроме главного окна, в программе LPC2000 Flash Utility имеются также ок- на Flash Buffer и RAM Buffer, предназначенные для осуществления операций с Flash-памятью и SRAM микроконтроллера при участии программных буферов Flash и RAM в памяти компьютера. Вид окна Flash Buffer показан на Рис. 31.2. Окна Flash Buffer и RAM Buffer открываются при выборе в меню главного окна Buffer>Flash Buffer Operations и Buffer>RAM Buffer Operations соответственно.
31.1. Загрузка Flash-памяти с помощью LPC2000Flash Utility 453 LPC2000 Flash Utility File Buffer Help PHILIPS LPC2000 Flash Utility V2.0.1 Puc. 31.1. Главное окно программы LPC2000 Flash Utility 00 ® LPC2OOO Flash Utility - Flash Buffer 0O3O FF ‘ 7. > FF rHOOOO FF 0H0000 7730 FF t'HQQjjOGiQ FF 0080 0000 FF . ~ FF 0.HDO08 087O FF 0000 0080 FF 010088 8830 FF 0 ' f „ FF 0888 8800 FF 8-H00OO 0( ?:•(] FF d-IOOOOuODO FF ?-H 0000 ODE 0 FF J' FF A' ff 5.0008 0110 FF .7 FF > ' ' FF 708888 8i 48 FF .. }i _ ' ~ pF •; FF {' 7 FF F'X ' FF 7O0888 8U8 FF 8 ff v : 'o ff 8 7 ' FF ’ O' ’> FF г J ’ FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF- FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF R: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF • • ? •*> FF FF FF FF FF FF яяяяяяяяяяяяяямя FF FF FF FF FF FF яяяяяяяяяяяяяяяя FF FF FF FF FF FF яяяяяяяяяяяяяяяя FF FF FF FF FF FF яяяяяяяяяяяязяяя FF FF FF FF FF FF яяяяяяяяяяяяяяяя FF FF FF FF FF FF яяяяяяяяяяяязяяя FF FF FF FF FF FF яяяяяяяяяяйяяязя FF FF FF FF FF FF ЯЯЯЯЯЯЯЯ53ЯЯЯЯЯЯЯ FF FF FF FF FF FF яяяяяяяяяяяяяяяя FF FF FF FF FF FF ЯЯЯЯЯЯЯЯ5ШЯЯЯЯЯЯ FF FF FF FF FF FF яяяяяяяяяяяяяяяя FF FF FF FF FF FF ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ FF FF FF FF FF FF яяяяяяяяяяяяяяяя FF FF FF FF FF FF ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ FF FF FF FF FF FF яяяяяяяяяяяяяяяя FF FF FF FF FF FF яяяяяяяяяяяяяяяя FF FF FF FF FF FF яяяяяяяяяяяяяяяя FF FF FF FF FF FF яяямяяяяяяяяяяяя FF FF FF FF FF FF яяяяяяяяяяяяяяяя FF FF FF FF FF FF яяяяяяяяяяяяяяяя FF FF FF FF FF FF яяяяяяяяйяяя^яяя FF FF FF FF FF FF ЯЯЯЯЯЯ5ШЯЯЯЯЯЯЯЯ FF FF FF FF FF FF яяяяяяяяяяяяйяяя FF FF FF FF FF FF ЯЯЯ.ЯЯЯЯЯЯЯ 55ЯЯЯЯЯ FF FF FF FF FF FF яяяяяяяяяяяяяяяя FF FF FF FF FF FF яяяяяяяяяяяяяяяя FF FF FF FF FF FF ЯЯЯМ^ЯЯЯЯЯЯЯЯЯЯЯ FF FF FF FF FF FF яяяяяяяяяяяяяяяя FF FF FF FF FF FF яяяяяяяяяяяяяяяя FF FF FF FF FF FF яяяяяяяяяяяяяяяя FF FF FF FF FF FF яяяяяяяяяяяяяяяя FF FF FF FF FF FF яяяяяяяяяяяяяяяя ' Load Hex Fife Vector Calc Upload to Flash e Fill Buffer | Download Flash | Save Hex Fil Fill Value: |FF~ 'Muutcssnorige k « -t. 3 « 1 1ППЛЛПППП । Run from Address |&H00000000 t* Thumb ARM oeiecceo nange jocnuuuuuuuu C Entire Buffer End; |&H0003DFFF Progress: Puc. 31.2. Окно Flash Buffer программы LPC2000 Flash Utility
454 Глава 31. Запись пользовательских программ во Flash-память микроконтроллеров К недостаткам используемой автором версии программы LPC2000 Flash Utility можно отнести то, что она поддерживает лишь одно расширение файлов «прошивки» Flash-памяти — hex. Примечание. Для того чтобы сгенерировать выходной файл с расширением hex средства- ми IDE IAR Embedded Workbench, следует выбрать в меню Project>Options, а затем в категории Linker выбрать опию Allow C-SPY-specific extra output file. На странице Extra Output следует вы- брать опцию Generate extra output file. В поле Format этой страницы следует выбрать выходной формат intel-extended, а в поле Format variant — None, как изображено на Рис. 31.3. Процесс загрузки hex-файла во Flash-память микроконтроллерров LPC2000 с помощью LPC2000 Flash Utility изображен на Рис. 31.4. Options for node "tim" Linker Category General Options C/C++ Compiler Assembler Custom Build Build Actions Debugger Simulator Angel IAR ROM-monitor J-Link Macraigor RDI Third-Party Driver Factory Settings | Output Extra Output | ttdefine | Diagnostics | List | Config | Proce .1.1 R l&enerate extra output fifel - (Jutput file------------------------------------------------------- P Override default [timhex • •• Format........................................................... Oytput format [intel extended Format variant: [None "y] OK I Cancel [ Puc. 31.3. Настройки компоновщика для генерации hex-файла Рис. 31.4. Процесс загрузки hex-файла во Flash-память микроконтроллеров LPC2000
31.2. Загрузка Flash-памяти микроконтроллеров LPC2000 с помощью С-SPY 455 31.2. Загрузка Flash-памяти микроконтроллеров LPC2000 с помощью C-SPY По умолчанию отладчик C-SPY загружает приложение в оперативную па- мять или во Flash-память микроконтроллера, когда запускается сеанс отладки. Перечисленные ниже опции Download отладчика позволяют различным обра- зом варьировать параметры такой загрузки (Рис. 31.5). Options for node "tim" Category: General Options C/C++ Compiler Assembler Custom Build Build Actions Linker Debugger Simulator Angel IAR ROM-monitor J-Link Macraigor RDI Third-Party Driver Factory Settings Setup Download | Extra Options | Plugins | Г Attach to program Г* Verify download Г Suppress download P Use flash loader(s) 00LKITJDIR$\config\flashloader\Philips\FlashPhilip? f Ё dft. ~ 1| OK | Cancel [ Puc. 31.5. Задание параметров отладчика для загрузки во Flash-память • Attach to program — эта опция используется, чтобы присоединить отлад- чик к выполняющейся прикладной программе в месте ее расположения без сброса целевой системы. При использовании опции Run to в меню Debugger>Setup, следует отменить выбор опции Attach to program. • Verify download — эта опция может быть использована для чтения загру- женного образа программного кода и его сравнения с исходным кодом на предмет проверки их идентичности. • Suppress download — эта опция используется, чтобы отлаживать програм- му во Flash-памяти. К началу отладки, программа уже должна быть загру- жена во Flash-память. Когда эта опция выбрана, загрузка заблокирована.
456 Глава 31. Запись пользовательских программ во Flash-память микроконтроллеров Если эта опция выбрана параллельно с опцией Verify download, отладчик прочитает образ кода программы из Flash-памяти и проверит его иден- тичность отлаживаемой программе. • Use flash loader(s) — эта опция позволяет задействовать один или несколь- ко Flash-загрузчиков, чтобы загрузить пользовательское приложение в Flash-память микроконтроллера. Если для выбранного пользователем микроконтроллера Flash-загрузчик доступен, он будет использоваться по умолчанию. Flash-загрузчик может быть описан как агент, который загружается в целе- вую систему. Он получает пользовательский код от отладчика C-SPY и записы- вает его во Flash-память. Flash-загрузчик использует механизм файлового вво- да/вывода, чтобы читать прикладную программу из хоста. Пользователь может выбрать один или несколько загрузчиков Flash-памяти, каждый из которых за- грузит определенную часть пользовательского приложения. IDE IAR Embedded Workbench поддерживает набор загрузчиков Flash-памяти для различных мик- роконтроллеров. Параметры загрузчика, не входящего в этот набор, могут быть заданы в IDE IAR Embedded Workbench вручную. 31.2.1. Задание загрузчика Flash-памяти Задание загрузчика Flash-памяти в IDE IAR Embedded Workbench произво- дится следующим образом: 1. Выбрать в меню ProjectXJptions. 2. Выбрать в категории Debugger позицию табуляции Download. 3. Выбрать поле Use Flash loader(s) и «кликнуть» на кнопке Edit. 4. В открывшемся диалоговом окне обзора загрузчиков Flash Loader Overview будут перечислены все доступные на текущий момент загрузчики Flash-па- мяти (Рис. 31.6). Рис, 31.6. Список доступных загрузчиков Flash-памяти В случае необходимости, пользователь может добавить к списку загрузчи- ков Flash-памяти новый загрузчик, «кликнув» на кнопке New. При этом откро- ется диалоговое окно конфигурации загрузчика Flash Loader Configuration (Рис. 31.7), в котором можно конфигурировать загрузку.
31.2. Загрузка Flash-памяти микроконтроллеров LPC2000 с помощью С-SPY 457 Flash Loader Configuration [•"Memory range---------—...................... I | Г start: I End: | Г Relocate ..........t. Base address: |T Г~ Override default flash loader path OK Cancel Extra parameters: Puc, 31,7, Окно конфигурации загрузчика 31.2.1.1 . Диалоговое окно обзора загрузчиков В диалоговом окне Flash Loader Overview перечисляются все доступные за- грузчики Flash-памяти. Если ранее на странице General Options>Target был про- изведен выбор микроконтроллера, имеющего встроенный загрузчик Flash-па- мяти, то в окне Flash Loader Overview по умолчанию будет указан этот загрузчик. С помощью кнопки ОК выбранный загрузчик(и) Flash-памяти может быть задан для того, чтобы загрузить приложение в Flash-память. Кнопкой Edit, как и кнопкой New, открывается диалоговое окно Flash Loader Configuration, где пользователь может изменить параметры настройки выбранного загрузчика. Кнопкой Delete можно удалить выбранную конфигурацию загрузчика. 31.2.1.2 . Диалоговое окно конфигурации загрузчика Диалоговое окно Flash Loader Configuration предоставляет пользователю воз- можность конфигурировать загрузку. Поле Memory range служит для задания части пользовательского приложе- ния, которая будет загружена во Flash-память. Если выбирается опция АН, то будет загружено все приложение целиком с использованием загрузчика Flash- памяти. Выбор опции Start/End позволяет задать диапазон памяти, в который будет произведена загрузка. Установкой опции Relocate можно отменить заданный по умолчанию базо- вый адрес Flash-памяти. Этот адрес является наименьшим определенным адре- сом во всем адресном пространстве Flash-памяти. Он используется для записи первого байта пользовательской программы, а его значение задается в команд- ном файле компоновщика. Однако в некоторых случаях может возникнуть не- обходимость отменить заданный по умолчанию базовый адрес и назначить вместо него какой-то другой адрес, значение которого может быть задано в тек- стовом поле Base address. При задании базового адреса, следует использовать следующие форматы представления чисел:
458 Глава 31. Запись пользовательских программ во Flash-память микроконтроллеров 123456 Десятичные числа 0x123456 Шестнадцатеричные числа 01234567 Восьмеричные числа Выбор опции Override default flash loader path позволяет отменить заданный по умолчанию загрузчик Flash-памяти и задать новый загрузчик, указав путь к нему. По умолчанию, загрузчик выбирается на странице General Options>Target при выборе типа процессора в поле Processor variant. Некоторые загрузчики Flash-памяти имеют собственный набор специфичес- ких опций. Текстовое поле Extra parameters позволяет задавать такие опции. На- пример, для загрузчика Flash-памяти микроконтроллеров семейства LPC2000, та- кой опцией является значение тактовой частоты микроконтроллера. Установлен- ное по умолчанию значение тактовой частоты равно 14746 кГц, а задать загрузчику новое значение можно с помощью команды —clock value в поле Extra parameters. 31.2.2. Механизм загрузки во Flash-память Когда опция Use flash loader(s) выбрана и один или несколько загрузчиков Flash-памяти сконфигурированы вышеописанным способом, при запуске сеан- са отладки будут выполнены следующие шаги: 1. C-SPY загружает загрузчик Flash-памяти в оперативную память целевой системы. 2. C-SPY начинает выполнение загрузчика Flash-памяти. 3. Загрузчик Flash-памяти открывает файл, содержащий прикладной код. 4. Загрузчик Flash-памяти читает прикладной код из файла и записывает его во Flash-память. 5. Выполнение загрузчика Flash-памяти завершается. 6. C-SPY переключает контекст на пользовательское приложение. Шаги 1...5 выполняются для каждого выбранного загрузчика Flash-памяти. 31.2.3. Требования к компоновке Когда пользователь производит формирование приложения, которое будет загружено во Flash-память, необходимо сгенерировать два выходных файла с одинаковыми именами, но разными расширениями, находящихся по одному и тому же пути. Первый из этих файлов обеспечивает отладчик символьной и от- ладочной информацией и имеет формат UBROF (расширение d79). Второй — файл простого кода (расширение sim), который будет открыт и прочитан за- грузчиком Flash-памяти, когда последний будет загружать приложение во Flash-память микроконтроллера. Для задания параметров при создании дополнительного выходного файла, следует выбрать в меню Project>Options, а затем в категории Linker выбрать опцию Allow C-SP¥-specific extra output file, как изображено на Рис. 31.8. На странице Extra Output следует выбрать опцию Generate extra output file. В поле Format этой страницы следует выбрать выходной формат simple-code, а в поле Format variant — None. В поле Output file следует выбрать опцию Override default, тем самым не от- меняя заданный по умолчанию выходной файл, как изображено на Рис. 31.9. На странице Config категории Linker необходимо задать командный файл компо- новщика, соответствующий загрузке во Flash-память, как показано на Рис. 31.10.
31.2. Загрузка Flash-памяти микроконтроллеров LPC2000 с помощью С-SPY 459 Options for node "tinY Category: General Options C/C++ Compiler Assembler Custom Build Build Actions Output | Extra Output | ftdefine | Diagnostics | List Factory Settings | ] Config | Proce < I ► Linker \Outputfile----------- Override default Debugger Simulator Angel IAR ROM-monitor J-Link Macraigor RDI Third-Party Driver Secondary output file: (None for the selected format) - Format-------------—....-......—.......-....— t* Debug information for C-SPY P With runtime control modules P With I/O emulation modules Г~ Buffered terminal output P Allow C-SPY-specific extra output file Module-local symbols: |lnclude all OK | Cancel | Puc. 31.8. Параметры страницы Output компоновщика для загрузки во Flash-память Options for node “tim’ Category: General Options C/C++ Compiler Assembler Custom Build Build Actions Linker Debugger Simulator Angel IAR ROM-monitor J-Link Macraigor RDI Third-Party Driver Factory Settings Output Extra Output | ftdefine ) Diagnostics) List | Config) Proce < IЛ OK | Cancel | Puc. 31.9. Параметры страницы Extra Output компоновщика для загрузки во Flash-память
460 Глава 31. Запись пользовательских программ во Flash-память микроконтроллеров Options for node "tim" Category: General Options C/C++ Compiler Assembler Custom Build Build Actions Linker Debugger Simulator Angel IAR ROM-monitor J-Link Macraigor RDI Third-Party Driver Output] Extra Output | ttdefine | Diagnostics) List Упкег command file.............-............ P pyerfde default |CAPLARM\firn\LPC2l’2^ “ Command file configuration tod Г Override default program entry Search paths: [one per line) ISTOOLKirDiRjI^ [ Raw binary image File: Factory Settings [ Config | Proce jJjL Symbol: Segment: Align: OK | Cancel | Puc. 31.10. Задание командного файла компоновщика для загрузки во Flash-память 31.2.4. Порядок действий при загрузке во Flash-память Рис. 31.11. Процесс загрузки пользовательской программы во Flash Порядок действий, который не- обходимо соблюдать при загрузке пользовательского приложения во Flash-память с помощью C-SPY, не отличается от порядка действий при отладке помощью C-SPY, описанно- го в главе 30 «Отладка приложений в целевой системе». Для записи кода во Flash-память, после компилиро- вания и компоновки проекта с опи- санными выше параметрами необ- ходимо перейти к его отладке, вы- брав в меню Project>Debug. Предварительно следует убедиться, что на вывод Р0.14 микроконтроллера LPC2000 подан внешний НИЗКИЙ уровень с помощью соответствующей перемычки. В случае успешной установки связи через JTAG после завершения процесса записи загрузчика в SRAM (см. Рис. 30.9), появится шкала, отображающая ход процесса загрузки во Flash-память (Рис. 31.11), и со- стоится переход в режим отладки. Однако пользовательская программа будет вы- полняться уже во Flash-памяти микроконтроллера. Чтобы убедиться в этом, от- ключите питание отладочной платы и включите его снова, предварительно сняв перемычку, с помощью которой внешний НИЗКИЙ уровень подавался на вывод микроконтроллера Р0.14. Разъем кабеля JTAG на время выполнения приложения во Flash-памяти следует отключить от платы.
ГЛАВА 32 ОБЩЕЕ ОПИСАНИЕ НАСТРОЕК ПРОЕКТОВ В IAR EWARM В этой главе даются краткие характеристики опциям и настройкам для ос- новных категорий пользовательских проектов. Как уже было сказано выше, ок- но настроек проекта отрывается при выборе в меню Project> Options для узла уровня проекта. В категории General Options этого окна доступны следующие настройки. Страница Target: • Processor variant — тип ядра процессора (как мы знаем, микроконтролле- ры LPC2000 имеют тип ядра ARM7TDMI-S, однако лучше задать конк- ретный микроконтроллер LPC2000, воспользовавшись опцией Device, как показано на Рис. 25.7); • FPU — выбор типа математического сопроцессора (в LPC2000 его нет); • Generate interwork code — компилятору разрешается в одном проекте ге- нерировать код как для режима ARM, так и для режима THUMB; • Processor mode — выбор режима процессора для проекта. Возможны сле- дующие варианты: ARM — режим с использованием полного 32-битного набора команд, THUMB — режим с использованием сокращенного 16- битного набора команд; • Endian mode — порядок размещения байт в многобайтном слове. Если вы- брана опция Little endian, то младший байт хранится по младшему адресу, старший — по старшему адресу. Если выбрана опция Big endian, то млад- ший байт хранится по старшему адресу, старший — по младшему адресу; • Stack align — выравнивание стека по 4 или по 8 байтам. Страница Output: • Output file — выбор выходного формата. Если Executable — генерирование файла прошивки, если Library — генерирование файла библиотечного модуля (при этом компоновкой модуля вместо XLINK занимается XAR); • Output directories — пути к файлам, генерируемым компилятором/компо- новщиком. Страница Library options: • Printf formatter и Scanf formatter — ограничения по форматированию дан- ных для функций типа printf() и scanf() (в большинстве случаев, формати- рование полностью не используется, поэтому можно сократить програм- мный код, отключив «лишние» типы форматирования). Страница Library configuration: • Library — настройка параметров поддержки библиотек C/C++ (можно задать полное отсутствие поддержки, частичную или полную поддержку).
462 Глава 32. Общее описание настроек проектов в IAR EWARM В категории компилятора C/C++ C/C++ Compiler доступны следующие на- стройки. Страница Language: • Language — поддержка С, C++ или расширенного C++; • Require prototypes — требовать обязательного объявления прототипа фун- кции; • Language conformance — соглашения о стандарте языка; • Plain ’char* is — знаковость переменной типа char при ее определении без непосредственного указания; • Enable multibyte support — разрешение поддержки многобайтных симво- лов. Страница Optimization задает уровни оптимизации компилятора. Страница Output: • Generate debug information — добавление дополнительной (отладочной) информации в объектный модуль для более наглядного отображения в отладчике С-SPY; • Object module name — позволяет, в случае необходимости, дать объектно- му модулю другое имя; • Segment base name — имена сегментов, префиксы и суффиксы их опреде- лений. Страница List предоставляет возможность настройки выходного листинга ком- пилятора. Страница Preprocessor задает путь поиска подключаемых (include) файлов, до- полнительные определения (при необходимости). Страница Diagnostic позволяет настроить выдачу компилятором диагностичес- ких сообщений. Страница Extra Options позволяет в случае необходимости задать дополнитель- ные ключи командной строки компилятора. В категории ассемблера Assembler доступны следующие настройки: Страница Language: • User symbols are case sensitive — различать регистр меток, определенных программистом; ♦ Macro quote characters — определить разделители аргументов макросов; • Allow alternative register names, mnemonics and operands — разрешить аль- тернативные обозначения для регистров, мнемонических обозначений команд и операндов. Страница Output: • Generate debug information — добавление дополнительной (отладочной) информации в объектный модуль для более наглядного отображения в отладчике С-SPY. Страница Diagnostics: • Warnings — управлять выдачей предупреждающих сообщений. Страница List позволяет производить управление листингом компилятора. Страница Preprocessor задает путь поиска подключаемых (include) файлов, а также дополнительные определения (если потребуется).
Глава 32. Общее описание настроек проектов в IAR EWARM 463 Страница Extra Options позволяет в случае необходимости задать дополнитель- ные ключи командной строки компилятора. Настройки категории заказной компоновки Custom Build предназначены для задания конфигурации при дополнительной компиляции средствами сто- ронних производителей. Эта категория может отсутствовать, в зависимости от варианта установки. В категории компоновщика Linker доступны следующие настройки. Страница Output: • Output file — возможность, в случае необходимости, сменить имя и/или расширение выходного файла; • Format — определение формата выходного файла. Для загрузчика LPC2000 ISP (bootloader) требуется задать установку Other и формат intel- extended, а для отладчика C-SPY лучше всего выбрать Debug information for C-SPY, With runtime control modules и With I/O emulation modules (заданы по умолчанию). Страница Exta Output позволяет задать настройки генерации дополнительного выходного файла. Страница #define может содержать дополнительные определения. Страница Diagnostics позволяет настроить выдачу диагностических сообщений компоновщиком. Страница List позволяет управлять листингом компоновщика. Страница Config: • Linker command file — задание командного файл компоновщика. Для мик- роконтроллера LPC2000 необходимо подключить соответствующий ко- мандный файл.
ГЛАВА 33 ПОЛЬЗОВАТЕЛЬСКИЕ ПРОЕКТЫ НА БАЗЕ МИКРОКОНТРОЛЛЕРОВ LPC2000 В этой главе, вниманию читателей предлагаются несколько пользователь- ских проектов на основе микроконтроллера LPC2129, которые демонстрируют работу ряда периферийных узлов микроконтроллера. Проекты разработаны на единой аппаратной платформе и представлены исходными текстами программ на языке С. Каждая из этих программ написана и отлажена лично автором и яв- ляется полностью законченным продуктом, реально работающим в «железе». Несмотря на отчасти демонстрационный характер, эти приложения, тем не ме- нее, могут быть полезны разработчикам систем на основе LPC2000, так как со- держат программные функции-драйверы цифровой и аналоговой периферии микроконтроллера, а также программно-аппаратные интерфейсы нескольких внешних устройств. 33.1. Платформа для создания приложений Как и в случае многих других популярных универсальных микроконтролле- ров, ряд сторонних производителей выпускает на базе микроконтроллеров LPC2000 различные отладочные комплекты, стартовые наборы разработчика, контроллеры-конструкторы и т. п. Их удобно использовать как для первоначаль- ного освоения, так и для создания макетов целевых пользовательских систем. В качестве базового устройства для создания приложений, автор выбрал микроконтроллер LPC2129, а в качестве аппаратной платформы использовал недорогую и доступную отладочную плату LPC-H2129 производства фирмы Olimex [6], принципиальная схема которой изображена на Рис. 33.1. Для отлад- ки приложений использовался JTAG-адаптер Wiggler, также производства Olimex [7]. Как можно видеть из рисунка, плата содержит: микроконтроллер U1 LPC2129, все выводы которого «оконечены» разъемами; два стабилизатора пи- тающих напряжений VR1 и VR2 (на 3.3 В и 1.8 В соответственно); микросхему- адаптер уровней интерфейса RS-232 U2 МАХ3232, подключенную к порту UARTO микроконтроллера; разъем и цепи подключения адаптера JTAG; филь- тры питания; элементы и^цепи синхронизации, сброса и прочие элементы схемной «обвязки» LPC2129. Частота колебаний встроенного тактового генера- тора микроконтроллера стабилизируется внешним кварцевым резонатором на частоту 14.7456 МГц. Кнопка RST предназначена для «ручного» сброса LPC2129. Внешний НИЗКИЙ уровень на линию РО. 14 LPC2129, необходимый для за- пуска обработчика команд ISP, подается с помощью перемычки BSL. Перемычка JRST используется для подключения линии 4 (DTR) интерфей- са RS-232 через цепь согласования уровней (D3, D4, Tl, R8, R9) к входу RESET (RST) микроконтроллера, что дает возможность с помощью программы-загруз-
33.1. Платформа для создания приложений 465 чика LPC2000 Flash Utility производить «ручной» сброс LPC2129 (см. раздел 31.1 «Загрузка Flash-памяти с помощью LPC2000 Flash Utility»). Перемычкой BDG линия RTCK интерфейса JTAG целевой системы (отла- дочной платы) может быть подключена к НИЗКОМУ уровню через резистор со- противлением 10 кОм, что необходимо для отладки пользовательских приложе- ний в целевой системе (см. раздел 30.1 «Аппаратные средства отладчика C-SPY»). Питание отладочной платы осуществляется от внешнего источника посто- янного напряжения +5 В, и подается через разъем PWR_JACK. Программная часть каждого проекта включает в себя файл главной функ- ции (основного цикла управляющей программы) main.c, а также приведенные ниже файлы специальных функций и специальных заголовков и определений hardwares и hardware. h. Файл hardware.с //-------------------------------------------------------------------------- // Специальные функции И--------------------------------------------------------------------------- #include "hardware.h" // подключение специальных заголовков и определений //Константы инициализации системы #define FOSC 14745600 //Частота кварцевого резонатора в Гц #define VALUEOFM 4 //соответствует PLLCFG_bit.MSEL=3 #define CCLK (FOSC*VALUEOFM) //CCLK = 58.9824 МГц #define PCLK (CCLK/4) //соответствует VPBDIV_bit.VPBDIV=0; #define PLOCK 0x0400 //FCCO = CCLK*2*P'= 156...320 МГц, значит, P=2, что соответствует PLLCFG_bit.PSEL=l; #define VIC_TIMER0_bit (1 « VIC_TIMER0) //Инициализация системы ---------------------------------------------------- void CPUinit(void) { //Настройка PLL (ФАПЧ) PLLCFG_bit.MSEL=3; //См. Расчет PLL в секции #define этого файла PLLCFG_bit.PSEL=1; //См. расчет PLL в секции #define этого файла PLLFEED=0xAA; PLLFEED=0x55; PLLCON_bit.PLLE=1; // Включение PLL (ФАПЧ) без подключения к ядру PLLFEED=0xAA; PLLFEED=0x55; while(!(PLLSTAT & PLOCK)); // Ожидание замыкания петли PLL (ФАПЧ) PLLCON_bit.PLLC=1; // Подключение PLL (ФАПЧ) к ядру PLLFEED=0xAA; PLLFEED=0x55; //Инициализация МАМ и тактовой частоты периферии MAMCR_bit.MODECTRL=0; //Первоначальное отключение МАМ MAMTIM_bit.CYCLES=3; //Рекомендуется для CCLK>40 МГц MAMCR_bit.MODECTRL=2; //Включение МАМ (функции МАМ полностью реализуются) VPBDIV_bit.VPBDIV=0; //См. расчет PLL в секции #define этого файла //Инициализация GPIO PINS.EL0 = 0; //Младшие линии Р0 являются GPIO PINSELl=0; //Старшие линии Р0 являются GPIO //задание направлений линий GPIO TO0PTR=0x3000000; 304
466 Глава 33. Пользовательские проекты на базе микроконтроллеров LPC2000 C0N1_2 мв-----------1 C0N1_4 «——---------о+3.3 В CON1_6 — RST CON1_8 mb-----------1 CON1_10 «в-----------о+1.8 В CON1_12 CON1_14 CON1_16 м BSL e__RTCK CON1_18 в- CON 1 20 в» CON1_22 в- CON1_24 м CON1_26 вв- CON 1_28 в- CON1.30 мв- о <1м CON1J32 » Rx1N TxOOUT RxOIN TxIOUT PWR_JACK VR2 (1.8 V) LM1117 О +1.8В ----- IN OUT ADJ/GND С14 I 10.0 T hzz (16B) r1] R23 220 U 100 /io/j 1 (1%) 11 0) С12 10.0 (6.3 В) си VR1 (3.3 V) LM1117 ВАТ54 2к О +3.3 В Н Т D2 1N4004 IN OUT С11 10.0 (16В) ADJ/GND R21 390 (1%) С13 47.0 (6.3 В) Рис. 33.1. Принципиальная схема
33.1, Платформа для создания приложений 467 C0N1_1 C0N1_3 C0N1_5 C0N1_7 C0N1.9 C0N1J1 CON1_13 CON 1J 5 CON1.17 CON1J9 CON1.21 CON1.23 CON1_25 CON1_27 CON1_29 CON1J31 hC3_ "OJ II C2 jiC1_ 11 0.1 jl2^__ .|С5_Г '4X1 J|C6_ iro7i 0.1 16 12 6 4 48 44 40 36 ________32 28 RTCK 24 TDD 64 TDI 60 TCK 56 TMS 52 TRST 20 6 18 25 42 50 +3.3 В GND о 23 "-------4T ----"------5T +1.8B о 17 " 49~ -------ST +3.3 в -J__________X ___58_ (|__59 U1 LPC2129 - P1.16/TRACEPKT0 P0.0/TXD0/PWM1 _ P1.17/TRACEPKT1 P0.1/RXD0/PWM3/EINT0 _ P1.18/TRACEPKT2 P0.2/SCL/CAP0.0 - P1.19/TRACEPKT3 P0.3/SDA/MAT0.0/EINT1 _ P1.20/TRACESYNC P0.4/3CK0CAP0.1 _ P1.21/PIPESTAT0 P0.5/MISO0/MAT0.1 _ P1.22/PIPESTAT1 P0.6/MOSI0/CAP0.2 _ P1.23/PIPESTAT2 P0.7/SSEL0/PWM2/EINT2 _ P1.24/TRACECLK P0.8/TXD1/PWM4 P1.25/EXTIN0 P0.9/RXD1/PWM6/EINT3 P1.26/RTCK P0.10/RTS1/CAP1.0 P1.27/TD0 P0.11/CTS1/CAP1.1 P1.28/TDI P0.12/DSR1/MAT1.0 . Р1.29ДСК P0.13/DTR1/MAT1.1 . P1.3/TMS P0.14/DCD 1/EINT1 P1.31 /TRST P0.15/R11/EINT2 P0.16/EINT0/MAT0.2/CAP0.2 USS1 P0.17/CAP1.2/SCK1/MAT1.2 USS2 P0.18/CAP1.3/MISO1/MAT1.3 USS3 P0.19/MAT1.2/MOSI1/CAP1.2 USS4 P0.20/MAT1.3/SSEL1/EINT3 USS5 P0.21/PWM5/CAP1.3 P0.22/CAP0.0/MAT0.0 P0.23/RD2 P0.24/TD2 VDD3-1(l/0) P0.25/RD1 VDD3-2(l/0) TD1 VDD3-3(l/0) P0.27/AIN0/CAP0.1 /МАТ0.1 P0.28/AIN1/CAP0.2/MAT0.2 P0.29/AIN2/CAP0.3/MAT0.3 VDD1.3—1 (CORE) P0.30/AIN3/EINT3/CAP0.0 VDD1.8-2(CORE) VDD1.8(A) X1 VDD3(A) X2 VSS_PLL VSSA RST 19 21 22 26 27 29 30 31 33 34 35 37 38 39 41 45 46 47 53 54 55 1 2 3 5 9 10 11 13 14 15 62 61 ^7_ J TXDO RXDO CON0.1 CONO_3 CONO_5 CONO_7 CONO_9 CON0.11 CONO_13 CONO_15 отладочной платы LPC-H2129 OLIMEX TXD1 RXD1 BSL CONO_17 CONO_19 CONO_21 CONO_23 CONO.25 CONO_27 CONO_29 CONO_31 CONO_2 CONO.4 CONO.6 CONO_8 CON0.10 CONO_12 CON0.14 CONO_16 —• CON0_18 —« CON0_20 —CONO_22 —» CONO_24 —« CONO_26 —« CON0.28 —« CON0_30 -в CONO_32 14.7456 МГц ----------- ...T- RST C28 39 C27 39
468 Глава 33. Пользовательские проекты на базе микроконтроллеров LPC2000 //ОЬОООО ООН 0000 0000 0000 0000 0000 0000 Р0.10...Р0.16 - входы // Р0.24, Р0.25- выходы IOlDIR=0xFF0000; //0Ь0000 0000 1111 1111 0000 0000 0000 0000 Р1.16...Р1.23 - выходы //задание начальных уровней на выходах IC0CLR=0x3000000; // сброс выходов Р0.24, Р0.25 IOlCLR=0xFF0000; //0Ь0000 0000 1111 1111 0000 0000 0000 0000 сброс выходов Р1.16...Р1.23 } ц--------------------------------------------------------------------------- II Инициализация прерываний ц--------------------------------------------------------------------------- void INTERRUPTSinit(void) { // МЕММАР =2; // Переотобразит векторы прерыв в SRAM в случае // выполнения кода в SRAM //Установки контроллера прерываний VICProtection =0; //К регистрам VIC можно обращаться в // пользовательском режиме VICIntEnClear - Oxffffffff; // Запретить все прерывания VicDefVectAddr - (U16)&TimerInterrupt; // Адрес сервисной подпрограммы // обработки прерываний VICIntSelect &= ~VIC_TIMER0_bit; // Линия IRQ от Таймера 0 VICVectAddrl - (U16)&TimerInterrupt; // Адрес сервисной подпрограммы // обработки прерываний VICVectCntll = 0x20 I VIC_TIMER0; // Разрешить вектор прерывания от // Таймера 0 VICIntEnable = VIC_TIMER0_bit; // Разрешить прерывание от Таймера 0 } //-------------------------------------------------------------------------- #pragma vector=0xl8 __irq __arm void irq_handler(void) { void (*interrupt_function)(); U16 vector; vector = VICVectAddr; // Поместить адрес вектора в контроллер VIC interrupt-function = (void(*)())vector; (*interrupt_function)(); // Вызов функции вектора прерывания VICVectAddr =0; // Сброс прерывания в VIC } // функция-обработчик прерывания от TIMER0 --------------------------------- static void Timerinterrupt() { opros_kn0(); //опрос кнопки 0 opros_knl(); //опрос кнопки 1 opros_kn2(); //опрос кнопки 2 opros_kn3(); //опрос кнопки 3 static U8 old_state; I/ генерация импульсной последовательности формирования -U для питания ЖКИ if (old_state==OFF) { OUT—U—LCD—UP; //начать импульс -U ЖКИ
33.1. Платформа для создания приложений 469 old_state=ON; } else { OUT_U_LCD_DOWN; //закончить импульс -U ЖКИ old_state=OFF; } T0IR = Oxff; // Сброс линии прерывания от Таймера 6 } //Инициализация и запуск TIMER0 void TIMEROinitstart() { TOTCR =0; // Отключить Таймер 0 (первый бит регистра!) T0CCR =0; // Запретить все типы захвата T0EMR =0; // Запретить все типы совпадения ТОРС = 0; // Предделитель не делит (коэффициент деления =1). T0MR0 = PCLK/1000; // Считать до этого значения. Вых. частота таймера 1000 Гц T0MCR =3; // Сброс и прерывание от MR0 (регистр совпадения 0). T0TCR - 1; // Включить Таймер 0 (первый бит регистра!) Файл hardware.h 11-------------------------------------------------------------------------- //Специальные заголовки и определения //-------------------------------------------------------------------------- #include <inarm.h> // подключение стандартных заголовков и определений #include <iolpc2129.h> // подключение стандартных заголовков и определений //Определения типов величин typedef unsigned int U8; typedef signed int S8; typedef unsigned int U16; typedef signed int S16; typedef unsigned long int U32; typedef signed long int S32; /* 8 bit unsigned UPGRADE*/ /* 8 bit signed UPGRADE*/ /* 16 bit unsigned */ /* 16 bit signed */ /* 32 bit unsigned */ /* 32 bit signed */ //Объявление функций инициализации системы, таймеров и обработчиков прерываний void CPUinit(void); void INTERRUPTSinit(void); __irq __arm void irq_handler(void); void TIMEROinitstart(); static void Timerinterrupt(); //Объявление функций опроса кнопок void opros_kn0(); // опрос кнопки 0 void opros_knl(); // опрос кнопки 1 void opros_kn2(); // опрос кнопки 2 void opros_kn3(); // опрос кнопки 3 //Объявление функции задержки для ожидания готовности ЖКИ void delay(U32); // для задержки 50 мкс при такт част 60 МГц ticks=3000 // для задержки 1800 мкс при такт част 60 МГц ticks=108000 //Объявление функции импульса стробирования записи/чтения ЖКИ void lcd_pulse_E(); //Объявление функции передачи в ЖКИ байта
470 Глава 33. Пользовательские проекты на базе микроконтроллеров LPC2000 void lcd_send_byte(U8); //Объявл. функции записи в ЖКИ одного символа данных по произвольному адресу ОЗУ ЖКИ void lcd_pro_data(U8, U8) ; //Объявление функции записи в ЖКИ одного символа данных по текущему адресу ОЗУ ЖКИ void lcd_tek_data(U8); //Объявление функции записи в ЖКИ команды void lcd_com(U8); //Объявление функции инициализации ЖКИ void lcd_init(); //Объявление функции очистки экрана ЖКИ void lcd_clear(); //Объявление функции опроса ЖКИ на предмет его готовности принимать команды и данные void lcd_opros(); 11--------------------------------------------------------------------------- //Определения битовых констант #define FALSE О #define FAIL О # define OFF 0 # define DOWN 0 # define LOW 0 # define TRUE 1 # define SUCCESS 1 # define ON 1 # define UP 1 # define HIGH 1 11-------------------------------------------------------------------------- //Макросы установки, сброса и тестирования бита #define BIT_SET(address,bit) (address 1= (1 « bit)) # define BIT_CLEAR(address,bit) (address &= ~(1 « bit)) # define BIT_TEST(address,bit) (address & (1 « bit)) II-------------------------------------------------------------------------- //Макросы сброса и установки выхода генерации имп последовательности -U ЖКИ #define OUT_U_LCD_DOWN I01CLR_bit.Р1_1б=1 # define OUT_U_LCD_UP I01SET_bit.Pl_16=l //Макросы сброса и установки выходов подключения светодиодов #define A_LED1_OFF IO0CLR_bit.P0_24=l #define A_LED1_ON IOOSET_bit.P0_24=l #define A_LED2_OFF IOOCLR_bit.P0_25=l #define A_LED2_ON IOOSET_bit.P0_25=l //Константы-пороги подавления дребезга кнопок #define DREB_KN0_K 50 #define DREB_KN1_K 50 #define DREB_KN2_K 50 #define DREB_KN3_K 50 //Входы подключения.: кнопок к MK #define IN_KNOP0 ' -IO0PIN_bit. P0-10 // кнопка 0 #define IN_KNOP1 IO0PIN_bit.P0_ll // кнопка 1 #define IN_KNOP2 IO0PIN_bit.P0_12 // кнопка 2 #define IN_KNOP3 IO0PIN_bit.P0_13 // кнопка 3 //Макросы имен цепей ЖКИ #define LCD.RW IOlPIN_bit.Pl_17 // RW (запись/чтение) #define LCD_RS IO1PIN_bit.Pl_18 // RS (команда/данные) #define LCD_E IOlPIN_bit.Pl_19 // E (строб записи/чте
33.1. Платформа для создания приложений 471 #define LCD.D4 I01PIN_bit.Pl_20 // #define LCD_D5 I01PIN_bit.Pl_21 // шина данных #define LCD_D6 I01PIN_bit.Pl_22 И #define LCD.D7 I01PIN_bit.Pl_23 / / / / //Макросы сброса/установки цепей ЖКИ #define LCD_RW_CLR I01CLR_bit.Pl_17=1 #define LCD_RW_SET I01SET_bit.Pl_17=l #define LCD_RS_CLR I01CLR_bit.Pl_18=l #define LCD_RS_SET I01SET_bit. Pl_18=l #define LCD_E_CLR I01CLR_bit.Pl_19=l #define LCD_E_SET I01SET_bit.Pl_19=l #define LCD_D4_CLR I01CLR_bit.Pl_20=l #define LCD_D4_SET I01SET_bit.Pl_20=l #define LCD_D5_CLR IQlCLR_bit.Pl_21=l #define LCD_D5_SET I01SET_bit.Pl_21=l #define LCD_D6_CLR I01CLR_bit.Pl_22=l #define LCD_D6_SET I01SET_bit.Pl_22=l #define LCD_D7_CLR I01CLR_bit.Pl_23=l #define LCD_D7_SET I01SET_bit. Pl_23 = l HD44780 //Определения русских #define rus_b букв знакогенератора ЖКИ 0xB2 // б #define rus_v ОхВЗ И в #define rus_g 0хВ4 И г #define rus_d ОхЕЗ И Д #define rus_eo 0хА2 II е' ' #define rus_j ОхВб И ж #define rus_z 0хВ7 II 3 #define rus_i 0хВ8 II и #define rus_ik 0хВ9 II й #define rus_k ОхВА II к #define rus_l ОхВВ И л #define rus_m ОхВС II м #define rus_n OxBD II н #define rus_p ОхВЕ II п #define rus_t OxBF II т #define rus_f 0хЕ4 И ф #define rus_tz 0хЕ5 И ц #define rus_ch ОхСО // ч #define rus_sch 0хС1 // ш #define rus_ssch ОхЕб // щ #define rus_m_zn 0хС4 // ь #define rus_t_zn 0хС2 И ъ #define rus_ii ОхСЗ II ы #define rus_ei 0хС5 И э #define rus_ju ОхСб И ю #define rus_ja- 0хС7 II я #define rus_B ОхАО И Б #define rus_G 0хА1 И г #define rus_D ОхЕО И д #define rus_J ОхАЗ II Ж #define rus_Z 0хА4 II 3 #define rus_I 0хА5 И И #define rus_IK ОхАб И Й
472 Глава 33. Пользовательские проекты на базе микроконтроллеров LPC2000 #define rus_L 0xA7 // л #define rus_P 0xA8 и п #define rus_U 0xA9 И У #define rus_F OxAA и ф #define rus_TZ OxEl и ц #define rus_CH OxAB И ч #define rus_SCH OxAC II ш #define rus_SSCH 0xE2 и щ #define rus_T_ZN OxAD И ъ #define rus_II OxAE и ы #define rus_EI OxAF II э #define rus_JU OxBO и ю #define rus_JA OxBl И я К специальным функциям относятся: функция инициализации системы CPUinit(void), инициализирующая модули микроконтроллера PLL, МАМ, GPIO, функция инициализации прерываний INTERRUPTSinit(void), функции- обработчики прерываний, а также еще несколько функций, о которых будет рассказано ниже. К специальным заголовкам и определениям относятся опре- деления типов величин, макросы битовых констант, макросы сброса/установ- ки/тестирования битов, коды символов (фонтов) ЖКИ и прочие определения. Настройки каждого проекта предусматривают загрузку управляющей програм- мы в Flash-память микроконтроллера, однако каталог каждого проекта содер- жит дополнительный подкаталог SRAM, где находятся файлы того же проекта, но с настройками, предусматривающими выполнение управляющей програм- мы в SRAM-памяти микроконтроллера. Исходные тесты программ этих двух вариантов различаются только в одном — в файле hardwares проекта, предна- значенного для Flash-памяти, закомментирована строка: // МЕММАР = 2; //Переотобразить векторы прерываний в SRAM //в случае выполнения кода в SRAM Следует заметить, что настройки предлагаемых ниже авторских проектов предусматривают размещение их каталогов и файлов на жестком диске ком- пьютера по определенному (заданному автором) пути. При реализации этих проектов, читателям необходимо учитывать данное обстоятельство, поэтому рекомендуется заново создавать проекты из имеющихся файлов описанным выше способом. 33.2. Интерфейс ввода/вывода в целевой пользовательской системе 33.2.1. Интерфейс кнопок управления В качестве внешних устройств ввода в описываемых ниже проектах на базе LPC2000, будут использоваться кнопки. Предлагаемый интерфейс кнопок обеспе- чивает программное подавление «дребезга контактов». Никаких дополнительных внешних элементов, подключаемых к микроконтроллеру, при этом не требуется. Блок-схема алгоритма интерфейса обслуживания одной кнопки изображе- на на Рис. 33.2. Программная реализация этого алгоритма на С представляет собой отдельную функцию, которая отслеживает моменты нажатия и отпуска-
33,2. Интерфейс ввода/вывода в целевой пользовательской системе 473 ния опрашиваемой кнопки, производя при этом фильтрацию импульсов «дре- безга» ее механических контактов. Рис. 33.2. Блок-схема алгоритма опроса одной кнопки управления Для построения функции программного интерфейса одной кнопки, разра- ботчику требуются выделить следующие ресурсы микроконтроллера: статичес- кую переменную, используемую для подсчета тайм-аута подавления «дребезга», еще две статические переменные, используемые для индикации момента нажа- тия на кнопку (флаг «нажато») и длительности удержания кнопки (флаг «удер- живается»). При этом переменная флага «нажато» должна быть описана в про- грамме, как доступная для других модулей, поскольку она в них также модифи- цируется. Кроме того, функция использует некоторую константу, задающую значение порога тайм-аута подавления «дребезга». Чтобы кнопочный интерфейс работал корректно, необходимо сбрасывать флаги «нажато» и «удерживается» всех опрашиваемых кнопок при первоначаль- ной инициализации. Как можно видеть из блок-схемы, при каждом вызове функции, при условии, что опрашиваемая кнопка не нажата, переменная под- счета тайм-аута и флаг «удерживается» будут обнуляться, т. е. будет происходить постоянная установка цифрового программного фильтра «дребезга» в началь- ное состояние. Вызовы функции в программе должны производиться с некото- рой периодичностью. Когда кнопка нажата, значение переменной подсчета
474 Глава 33. Пользовательские проекты на базе микроконтроллеров LPC2000 тайм-аута будет инкрементироваться при каждом вызове функции. Причем, ре- ально увеличиваться оно станет только после окончания «дребезга», когда пере- менная перестанет обнуляться из-за пауз между «дребезговыми» импульсами. Только спустя некоторое время после окончания импульсов «дребезга», насту- пит момент, когда значение переменной подсчета тайм-аута превысит значение константы порога тайм-аута и, следовательно, произойдет установка флагов «нажато» и «удерживается» для опрашиваемой кнопки. Состояние флага «удерживается» инверсно отображает текущее состояние входа подключения соответствующей ему кнопки, с учетом подавления импуль- сов «дребезга», т. е. он будет оставаться в состоянии логической единицы столь- ко времени, сколько удерживается кнопка после окончания «дребезга», и сбро- сится при первом же импульсе «дребезга» в момент отпускания кнопки. Этот флаг можно использовать в программе для реализации каких-то дополнитель- ных функций данной кнопки в интерфейсе ввода разрабатываемого устройства, например, для задания какого-либо режима, необходимым (но недостаточным) условием которого служит текущее «нажатое» состояние этой кнопки. Флаг «нажато» в предлагаемом алгоритме обладает свойством «защелкива- ния», т. е. при отпускании кнопки он в подпрограмме не сбрасывается. Опрос состояния, с целью обнаружения установки и последующего сброса флага «на- жато», возлагается на ту часть основной программы, которая отвечает за обра- ботку сигнала о том, что данная кнопка была нажата. Разработчик может задавать конкретное значение константы порога тайм- аута «дребезга», чтобы обеспечить требуемое время реакции устройства на на- жатую кнопку, в зависимости от значения периода вызова функции кнопочного интерфейса и конкретного типа (линейных размеров) кнопки. Исходный текст набора функций, реализующих описанный выше алгоритм обслуживания четырех кнопок, содержатся в файле knop.с. Файл knop.c //------------------------------------------------------------------------ // ПО поддержки интерфейса кнопок с функцией подавления дребезга контактов. // Каждой кнопке сопоставлено два флага: флаг нажатия (flagn_kni) и флаг // удержания (flagu_kni). Пока кнопка нажата, ее флаг удержания установлен, // при отпущенной кнопке ее флаг удержания сброшен. При нажатии на кнопку, // устанавливается ее флаг нажатия. Сброс этого флага возлагается на // стороннюю программу обработки нажатий на кнопки. // Каждой кнопке сопоставлена константа порога подавления дребезга DREB_KNi_K. // Все флаги устанавливаются и сбрасываются сигналами с выхода // программного фильтра подавления дребезга (т.е. дребезг на них не влияет). / / Кнопка включается между входом и общим проводом и имеет контакты на замыкание. //------------------------------------------------------------------------ #include "hardware.h" // подключение специальных заголовков и определений //флаги нажатия на кнопки volatile U8 flagn_kn0=0, flagn_knl=O, flagn_kn2=0, flagn_kn3=0; //флаги удержания кнопок static U8 flagu_kn0=0, flagu_knl=O, flagu_kn2=0, flagu_kn3=0; //переменные накопления дребезга контактов кнопок static U8 dreb_kn0=0, dreb_knl=0, dreb_kn2=0, dreb_kn3=0; //Функции опроса кнопок с подавлением дребезга //опрос кнопки 0 ---------------------------------------------------------
33.2. Интерфейс ввода/вывода в целевой пользовательской системе 475 void opros_knO() { if (IN_KNOPO==OFF) { if (dreb_knO > DREB_KN0_K) { if (flagu_knO==l) {} else { flagu_knO=l; flagn_knO=l; } } else dreb_knO++; } else { flagu_kn0=0; dreb_kn0=0; } } //опрос кнопки 1 void opros_knl() { if (IN_KNOP1==OFF) { if (dreb.knl > DREB_KN1_K) { if (flagu_knl==l) {} else { flagu_knl=l; flagn_knl=l; } } else dreb_knl++; } else { flagu_knl=0; dreb_knl=0; } } //опрос кнопки 2 void opros_kn2() { if (IN_KNOP2==OFF) { if (dreb_kn2 > DREB_KN2_K) { // нажата ли кнопка? //да, превышен ли порог накопления дребезга? // да, установлен ли флаг удержания? // да, ничего не делать // нет, установить флаг удержания // установить флаг нажатия //не превышен, продолжить накопление //не нажата // обнулить флаг удержания // обнулить счетчик накопления подавления дребезга // нажата ли кнопка? //да, превышен ли порог накопления дребезга? // да, установлен ли флаг удержания? // да, ничего не делать // обнулить // обнулить // нет, установить флаг удержания // установить флаг нажатия //не превышен, продолжить накопление //не нажата флаг удержания счетчик накопления подавления дребезга // нажата ли кнопка? //да, превышен ли порог накопления дребезга?
476 Глава 33. Пользовательские проекты на базе микроконтроллеров LPC2000 if (flagu_kn2= = 1) II да, установлен ли флаг удержания? {} else { flagu_kn2=l; flagn_kn2=l; } } else dreb_kn2++; } else { flagu_kn2=0; И // да, ничего не делать // нет, установить флаг удержания // установить флаг нажатия //не превышен, продолжить накопление //не нажата обнулить флаг удержания dreb_kn2=0; // обнулить счетчик накопления подавления дребезга } } //опрос кнопки 3 -------------------------------------------------------------- void opros_kn3() { if (IN_KNOP3==OFF) // нажата ли кнопка? { if (dreb_kn3 > DREB_KN3_K) //да, превышен ли порог накопления дребезга? { if (flagu_kn3==l) // да, установлен ли флаг удержания? {} //да, ничего не делать else { flagu_kn3=l; // нет, установить флаг удержания flagn_kn3=l; // установить флаг нажатия } } else dreb_kn3++; //не превышен, продолжить накопление } else //не нажата { flagu—kn3=0; // обнулить флаг удержания dreb_kn3=0; // обнулить счетчик накопления подавления дребезга } } Этот файл будет использоваться во всех проектах, как подключаемый. Вы- зовы функций опроса кнопок производятся в программах проектов с частотой 1 кГц из функции-обработчика прерываний от Таймера 0 Timerlnterrupt(), содер- жащейся в файле hardwares. Следует заметить, что прерывания от этого тайме- ра, во всех предлагаемых проектах, используются для осуществления различ- ных программных операций, которые требуется производить периодически. Определения входов подключения кнопок к микроконтроллеру содержатся в файле hardware.h. В файле кпор.с содержатся функции opros_kn0()...opros_kn3() обслуживания четырех кнопок, каждая из которых подключена к отдельной ли- нии ввода/вывода. Эти линии в функциях имеют формальные имена IN_KNOPO...IN_KNOP3. При этом предполагается, что кнопки являются нор- мально разомкнутыми и включены между входами LPC2000 и общим проводом
33.2. Интерфейс ввода/вывода в целевой пользовательской системе 477 устройства (последовательно с токоограничительными резисторами 1 кОм), а линии подключения кнопок сконфигурированы в микроконтроллере как входы линий ввода/вывода общего назначения (GPIO) и подтянуты к «плюсу» источ- ника питания внешними резисторами. Константы значения порога тайм-аута «дребезга» в функциях имеют имена DREB_KN0_K...DREB_KN3_K, а их значе- ния содержатся в файле hardware.h. 33.2.2. Интерфейс ЖКИ Интерфейс вывода в устройстве на базе микроконтроллера, в большинстве случаев, должен включать в себя какие-то аппаратные средства индикации с со- ответствующей программной поддержкой. В настоящее время, весьма широко распространены символьные (буквенно-цифровые) жидкокристаллические мо- дули со встроенным контроллером управления, совместимым с контроллером HD44780 фирмы HITACHI. Они выпускаются многими производителями в раз- личных модификациях и предоставляют очень широкие возможности в плане отображения текстовой информации. В предлагаемых далее проектах автор ис- пользовал именно такой индикатор — WH1602 фирмы «Winstar» (русифициро- ванный, 16 символов в строке, 2 строки). Таблица символов (фонтов) для этого и других русифицированных ЖКИ приводится в Приложении 6. Электрические параметры, временные диаграммы сигналов управления, набор команд индика- торов с НЭ44780-совместимыми контроллерами подробно описаны в [8, 9]. Передача информации из микроконтроллера в НП44780-совместимый ин- дикатор возможна по параллельной восьми- "или четырехпроводной шине дан- ных. В первом случае, передача производится быстрее, но дополнительно зани- маются четыре линии ввода/вывода микроконтроллера. Предлагаемое далее пользовательское программное обеспечение реализует передачу данных из LPC2000 в модуль ЖКИ по четырехпроводной шине данных. В ходе взаимо- действия с индикатором, микроконтроллер может либо передавать в него дан- ные, без опроса его состояния, либо производить опрос индикатора о готовнос- ти к приему данных, и передавать данные по готовности. В первом случае, го- товность ЖКИ к приему данных микроконтроллер не проверяет, а вместо этого программно генерирует временные задержки, заведомо большие интервалов времени, необходимых ЖКИ на подготовку к приему. Исходный текст набора функций, реализующих интерфейс обмена с ЖКИ по четырехпроводной шине данных с опросом его состояния или без такового, содержатся в файле led.с. Файл Lcd.c И------------------------------------------------------------------- //•ПО поддержки ЖКИ HD44780. Данные передаются в ЖКИ по 4-битной шине. //Если ЖКИ опрашивается, то команды "lcd_opros();" надо раскомментировать, //а команды "delay(3000);" и "delay(108000);" закомментировать, если ЖКИ //не опрашивается, то наоборот. (В приведенном варианте ЖКИ опрашивается.) //------------------------------------------------------------------ #include "hardware.h" // подключение специальных заголовков и определений void delay(U32 ticks) //задержка для ожидания готовности ЖКИ { f or (; ticks; --ticks)
478 Глава 33. Пользовательские проекты на базе микроконтроллеров LPC2000 asm ("пор"); } } void led—pulse_Е() //импульс стробирования записи/чтения ЖКИ { delay(100); LCD_E_SET; // фронт импульса стробирования записи/чтения ЖКИ delay(100); LCD_E_CLR; // спад импульса стробирования записи/чтения ЖКИ delay(100); } void lcd_send_byte(U8 { if (BIT_TEST(byte,4)) else LCD_D4_CLR; if (BIT_TEST(byte,5)) else LCD—D5_CLR; if (BIT_TEST(byte,6)) else LCD_D6_CLR; if (BIT_TEST(byte,7)) else LCD—D7_CLR; lcd_pulse_E(); if (BIT_TEST(byte,0)) else LCD—D4_CLR; if (BIT_TEST(byte,1)) else LCD—D5_CLR; if (BIT_TEST(byte,2)) else LCD—D6_CLR; if (BIT_TEST(byte,3)) else LCD—D7—CLR; lcd_pulse_E(); } byte) //передача в ЖКИ байта LCD—D4_SET; //--------------------- И LCD_D5_SET; // И LCD—D6_SET; // передача старшей тетрады И LCD_D7_SET; // // И---------------------- LCD_D4_SET; //--------------------- И LCD_D5_SET; // // передача младшей тетрады LCD_D6_SET; // // LCD—D7_SET; // И 11----------------------- запись в ЖКИ одного символа данных по произвольному адресу ОЗУ ЖКИ //если ЖКИ опрашивается, то команды "lcd_opros();" надо раскомментировать, //а команды "delay(3000);" закомментировать, в противном случае - наоборот void lcd_pro_data(U8 date, U8 addr) { LCD_RW_CLR; //режим записи в ЖКИ LCD—RS_CLR; //будет передаваться команда BIT_SET(addr,7); //будет передаваться адрес ОЗУ ЖКИ 1сd_send_byte(addr); //передача адреса //delay(3000); //задержка 50 мкс для готовности ЖКИ lcd_opros(); '//ожидание готовности ЖКИ LCD_RS_SET; //будут передаваться данные if (date < 10) lcd_send_byte(date + 0x30); //передается десятичная цифра else 1cd_send_byte(date); //передается символ (не цифра) //delay(3000); //задержка 50 мкс для готовности ЖКИ lcd_opros(); //ожидание готовности ЖКИ } // запись в ЖКИ одного символа данных по текущему адресу ОЗУ ЖКИ //если ЖКИ опрашивается, то команду "lcd_opros();" надо раскомментировать,
33.2, Интерфейс ввода/вывода в целевой пользовательской системе 479 //а команду "delay(3000);" закомментировать, в противном случае - наоборот void lcd_tek_data(U8 date) { LCD_RW_CLR; //режим записи в ЖКИ LCD_RS_SET; //будут передаваться данные if (date < 10) lcd_send_byte(date + 0x30); //передается десятичная цифра else lcd_send_byte(date); //передается символ (не цифра), //delay(3000); //задержка 50 мкс для готовности ЖКИ lcd_opros(); //ожидание готовности ЖКИ } void lcd_com(U8 comand) // запись в ЖКИ команды //если ЖКИ опрашивается, то команду "lcd_opros();" надо раскомментировать, //а команду "delay(108000);" закомментировать, в противном случае - наоборот { LCD_RW_CLR; //режим записи в ЖКИ LCD_RS_CLR; //будет передаваться команда lcd_send_byte(comand); //передача команды //delay(108000); //задержка 2000 мкс для готовности ЖКИ lcd_opros(); //ожидание готовности ЖКИ } void lcd_init() // инициализация ЖКИ { lcd_com(0x28); //4-битная шина, 2 строки, символ 5x7 lcd_com(0x01); //очистка дисплея, курсор в нач положение led—сот(0x06); //дисплей не сдвигать, курсор сдвигать lcd_com(ОхОС); //включить дисплей, погасить курсор } void lcd_clear() //очистка экрана ЖКИ { lcd_com(0x01); //очистка дисплея, курсор в начальное положение } //Опрос ЖКИ на предмет его готовности принимать команды и данные void lcd_opros() { LCD—RW—SET; //режим чтения из ЖКИ LCD_RS_CLR; //будет читаться команда IO1DIR-bit.Р1_20=0; //----------------------------- IOlDIR_bit.Р1_21=0; // сделать шину данных IO1DIR—bit.Р1_22=0; // входами IO1DIR—bit.Р1_23=0; //--------------------------- Opros: delay(100); // LCD—E—SET; // фронт импульса стробирования записи/чтения ЖКИ delay(100); \ // if (LCD_D7==ON) //(опрос флага BUSY) свободен ли ЖКИ? { delay(100); // LCD_E_CLR; // спад импульса стробирования записи/чтения ЖКИ delay(100); // lcd_pulse_E(); //импульс стробирования записи/чтения ЖКИ goto Opros; // }
480 Глава 33. Пользовательские проекты на базе микроконтроллеров LPC2000 else { delay(100); // LCD_E_CLR; // спад импульса стробирования записи/чтения ЖКИ delay(lOO); // lcd_pulse_E(); //импульс стробирования записи/чтения ЖКИ } LCD_RW_CLR; //режим записи в ЖКИ I01DIR_bit.Pl_20=l; //------------------------------ I01DIR_bit.Р1_21=1; // сделать шину данных I01DIR_bit.Р1_22=1; // выходами I01DIR_bit.Pl_23=l; //------------------------------ delay(100); // } Этот файл в дальнейшем будет указываться во всех проектах, как подключа- емый. В файле содержатся следующие функции: функция начальной инициа- лизации ЖКИ после сброса lcd_init(), функция очистки экрана ЖКИ lcd_clear(), функция передачи в ЖКИ одной команды lcd_com(comand), функ- ция записи в ОЗУ ЖКИ одного байта данных (индикации на экране ЖКИ од- ного символа) по текущему адресу lcd_tek_data(date) или по произвольному ад- ресу — led_pro_data(date, addr), функция опроса состояния ЖКИ lcd_opros(), возвращающая управление по готовности последнего, а также несколько вспо- могательных функций следующего уровня вложенности. Если пользователем выбран вариант интерфейса с опросом текущего состояния ЖКИ, то в файле необходимо «вручную» раскомментировать (убрать стоящие перед ними симво- лы «//») команды вызова функции lcd_opros() во всех функциях, где они встре- чаются, а команды вызова функций временных задержек delay(3000) и delay(108000), наоборот, везде закомментировать (поставить перед ними симво- лы «//»). Если выбран вариант с отсутствием опроса (генерации задержек ожи- дания), необходимо, наоборот, раскомментировать вызовы этих задержек и за- комментировать вызовы функции опроса lcd_ppros(). Следует заметить, что для такого «быстрого» микроконтроллера, каким является LPC2129, очевидно, ра- циональнее будет использовать вариант интерфейса ЖКИ с опросом его состо- яния (в этом случае, программа тратит значительно меньшее общее время на индикацию). Определения и макросы задания состояний линий подключения ЖКИ к микроконтроллеру содержатся в файле hardware.h. Там же находятся оп- ределения констант-фонтов русского и латинского алфавитов HD44780-COB- местимого ЖКИ. Следует заметить, что, поскольку питание ЖКИ осуществляется от систем- ного питающего напряжения +3.3 В, контрастность его изображения может оказаться недостаточной. По этой причине в системе производится генерация дополнительного отрицательного напряжения «—U ЖКИ» со значением около —1.5 В для питания ЖКИ, как изображено на Рис. 33.3. Для его получения,ис- пользуется импульсная последовательность частотой 500 Гц, генерируемая на линии Р1.16 по прерыванию от Таймера 0 в функции Timerlnterrupt() из файла hardwares.
33.3. Первый пользовательский проект 481 Рис, 33,3, Принципиальная схема базовой части макета целевой пользовательской системы 33.3. Первый пользовательский проект Предлагаемый вниманию читателей пользовательский проект является чис- то демонстрационным и не имеет самостоятельного прикладного значения. Его цель заключается в демонстрации для пользователя работы интерфейса вво- да/вывода (кнопок и ЖКИ), программное обеспечение поддержки которого было описано выше. Помимо этого, проект иллюстрирует базовую «заготовку» программы на С, и базовый макет целевой пользовательской системы (Рис. 33.3), которые будут использоваться в дальнейшем в других проектах на основе LPC2129. Используя базовую «заготовку» программы, можно строить разнообразные проекты на основе микроконтроллера LPC2000, добавляя в про- ект с «заготовкой» те или иные, необходимые для конкретной задачи, функции и модули (файлы). Помимо штатных элементов отладочной платы, установленных производи- телем, макет целевой системы содержит дополнительные внешние устройства: линейку кнопок управления SB1...SB4 («0»...«3»), светодиоды HL1, HL2 («1», «2») и символьный жидкокристаллический индикатор со встроенным контрол- лером HG1. В рамках создания различных проектов, к схеме в дальнейшем бу- дут подключаться и другие внешние устройства. Программные интерфейсы LPC2000 для всех добавляемых в систему внешних устройств будут описаны ни- же. Соединительные разъемы, установленные на плате LPC-H2129, на схеме Рис. 33.3 условно не показаны. Все файлы проекта находятся в каталоге LCD_KNOP. Основная программа проекта содержится в файле main.с. В начале главной функции main() произво- дится инициализация блока управления системы (вызов функции CPUinit()\ прерываний (вызов функции INTERRUPTSinit()), Таймера 0 (вызов функции TIMEROinitstart()Y сброс и инициализация ЖКИ. Затем, по мере выполнения 304
482 Глава 33. Пользовательские проекты на базе микроконтроллеров LPC2000 основной программы, на ЖКИ с помощью функций его обслуживания выво- дится заставка-приветствие «Привет!». Далее начинается основной цикл программы, в котором производится пос- ледовательный опрос четырех кнопок. В случае обнаружения нажатия любой из них, программа производит определенные действия. При нажатии на кнопку «О», программа выводит на ЖКИ последовательность символов «0123456789». При нажатии на кнопку «1» — последовательность символов «ABCDEFGHIJ». При нажатии на кнопку «2», на ЖКИ выводится каждый раз новый символ из некоторого подмножества набора символов ЖКИ. А при нажатии на кнопку «3», производится инициализация (и очистка) ЖКИ (вызов функции lcd_init()). При этом, нажатие на каждую из четырех кнопок вызывает также смену состоя- ния одного из светодиодов «1» или «2» на противоположное. Функция инициализации блока управления системы CPUinit(), размещен- ная в файле hardware.^ содержит команды инициализации и настройки систе- мы ФАПЧ [10], инициализации модуля МАМ, инициализации и задания на- правлений линий ввода/вывода GPIO. Функция инициализации прерываний INTERRUPTSinit(), размещенная в этом же файле, содержит команды инициа- лизации регистра управления памятью МЕММАР и контроллера векторов пре- рываний VIC. Необходимо заметить, что инициализацию регистра МЕММАР значением 2 необходимо производить в программе только в том случае, если программа выполняется в SRAM и, следовательно, в пространство SRAM сле- дует переотобразить векторы прерываний. В случае выполнения программы во Flash-памяти, такое переотображение производить не требуется, и в регистре МЕММАР при инициализации должно оставаться заданное по умолчанию зна- чение, т. е. команду «МЕММАР = 2;» в программе следует закомментировать. В файле hardware.с также находится функция-обработчик прерываний от Таймера 0 — Timerlnterrupt(). Она содержит команды вызова всех событий, ко- торые должны происходить в системе регулярно. К таким событиям относятся вызовы функций опроса кнопок opros_kn0()...opros_kn3(), а также генерация импульсной последовательности, используемой для формирования дополни- тельного отрицательного напряжения для ЖКИ — «-U ЖКИ». Прерывание от Таймера 0 обрабатывается в системе как прерывание IRQ. Таймер 0 конфигури- руется и настраивается с помощью функции TIMEROinitstart(). Прерывания от Таймера 0 генерируются при совпадении его содержимого с регистром T0MR0, а частота генерации этих прерываний выбрана в программе равной 1000 Гц. Поскольку состояние выхода (Р1.16) генерации импульсной последовательнос- ти для формирования «—U ЖКИ» инвертируется при каждом вызове функции Timerlnterrupt(), следовательно, частота этой последовательности составляет 1000/2 = 500 Гц. 33.4. Интерфейс обслуживания RTC Проект интерфейса обслуживания модуля часов-календаря реального вре- мени RTC микроконтроллеров LPC2000, в отличие от предыдущего проекта, имеет очевидное прикладное значение. По сути, этот проект представляет со- бой встраиваемый программно-аппаратный модуль часов-календаря реального времени, который может быть использован, и как самостоятельное устройство «часы-календарь», и в качестве программно-аппаратного дополнения к како- му-либо устройству, реализованному на микроконтроллере LPC2000.
33.4. Интерфейс обслуживания RTC 483 Для работы проекта в базовом макете целевой пользовательской системы (Рис. 33.3) не требуется делать никаких дополнительных аппаратных подключе- ний. Интерфейс обслуживания модуля RTC LPC2000 [11] реализован в проекте, все файлы которого находятся в каталоге RTC. Функции обслуживания RTC, их заголовки и определения находятся в файлах rtc.c nrtc.h, а основная программа интерфейса модуля RTC — в файле main.c этого проекта. Программа произво- дит циклическое чтение содержимого специальных регистров консолидирован- ного времени модуля RTC и вывод на индикацию значений текущего времени и даты, а также реализует возможность пользовательской установки текущего времени и даты с помощью кнопок управления. Файл rtc.c //ПО обслуживания модуля часов-календаря реального времени RTC И----------------------------------------------------------- #include #include переменные sec=0; min=0; hour=0; dow=0; dom=0; month=0; hardware.h" // подключение специальных заголовков и определений rtc.h" // подключение специальных заголовков и определений текущего времени и даты // секунды // минуты // часы дни недели дни месяца месяцы годы II разряды десятичного числа чтения регистров консолидированного времени RTC Obll.llll Obll.1111.0000.0000 Obi.1111.0000.0000.0000.0000 Oblll.0000.0000.0000.0000.0000.0000 Obi.1111 Obllll.0000.0000 Obllll.1111.1111.0000.0000.0000.0000 Obllll.1111.1111 RTC rl000=0; rl00=0; rl0=0; rl = 0; для MASKSEC 0x3F MASKMIN 0x3F00 MASKHOUR OxlFOOOO MASKDOW 0x7000000 MASKDOM OxlF MASKMONTH OxFOO MASKYEAR OxFFFOOOO MASKDOY OxFFF //сброс счетчика тактовой частоты RTC и запрет тактирования //запрет тактирования для инициализации счетчиков времени //сброс всех прерываний RTC //запрет прерываний от инкрементирования счетчиков времени //все прерывания от тревоги RTC замаскированы (запрещены) целой и дробной частей предделителя U8 U8 U8 U8 U8 U8 U16 уеаг=0 U8 U8 U8 U8 //маски #define #define #define #define #define #define #define #define //Функция инициализации модуля void RTCinit() { CCR = 0x2; CCR = 0x0; ILR = 0x3; CIIR = 0x0; AMR = OxFF; I/инициализация PREINT = (int)(14745600/32768)-!; PREFRAC = 14745600-((PREINT+1)*32768); //При pclk = 14745600 PREINT = int(14745600/32768)-1 = int(450)-l = 449
484 Глава 33. Пользовательские проекты на базе микроконтроллеров LPC2000 //PREFRAC = 14745600 - ((449 + 1) х 32768) = 0 HOUR=0; //----------------------------------------------------- MIN=0; // начальная инициализация счетчиков времени и даты SEC=1; // корректными значениями: DOW=6; //00:00:01 ВС DOM=1; 'll 01.01.2006 (1 день года) MONTH=1; // YEAR=2006; // DOY=1; //----------------------------------------------------- CCR = 0x1; //разрешение тактирования (старт RTC) } //Функция запуска счета модуля RTC void RTCstartO { CCR = 0x1; //старт счета RTC } //Функция останова счета модуля RTC void RTCstopO { CCR = 0x0; //останов счета RTC } //Функция чтения и индикации текущего времени и даты модуля RTC void RTCread_ind_date_time() { //получение текущего времени и даты с помощью масок чтения //регистров консолидированного времени sec=CTIME0 & MASKSEC; min=(CTIME0 & MASKMIN)»8; hour=(CTIME0 & MASKHOUR)»16; dow=(CTIME0 & MASKDOW)>>24; dom=CTIMEl & MASKDOM; month=(CTIME1 & MASKMONTH) »8 ; year=(CTIMEl & MASKYEAR) »16; //преобразование в десятичное представление и индикация часов rlO = hour / 10; rl = hour % 10; lcd_pro_data(rlO, 0); lcd_tek_data(rl); lcd_tek_data(':'); //преобразование в десятичное представление и индикация минут rlO = min / 10; rl = min % 10; lcd_tek_data(rlO); -- lcd_tek_data(rl); lcd_tek_data(':'); //преобразование в десятичное представление и индикация секунд rlO = sec / 10; rl = sec % 10; lcd_tek_data(rlO) ; lcd_tek_data(rl); //преобразование в буквенные аббревиатуры и индикация дней недели switch(dow)
33.4. Интерфейс обслуживания RTC 485 { case 0: { lcd_pro_data(rus_P, 10); //ПН lcd_tek_data(' H'); } break; case 1: { lcd_pro_data('В', 10); //ВТ lcd_tek_data('T'); } break; case 2: { lcd_pro_data('C', 10); //CP lcd_tek_data(' P'); } break; case 3: { lcd_pro_data(rus_CH, 10); //ЧТ lcd_tek_data('T'); } break; case 4: { lcd_pro_data(rus_P, 10); //ПТ lcd_tek_data(' T' ) ; } break; case 5: { lcd_pro_data('C', 10); //СБ lcd_tek_data(rus_B); } break; case 6: { lcd_pro_data('B', 10); //BC lcd_tek_data('C'); } } //преобразование в десятичное представление и индикация дней месяца rlO = dom / 10; rl = dom % 10; lcd_pro_data(rlO, 64); lcd_tek_data(rl); lcd_tek_data('.'); //преобразование в десятичное представление и индикация месяцев rlO = month / 10; rl = month % 10;
486 Глава 33. Пользовательские проекты на базе микроконтроллеров LPC2000 lcd_pro_data(rlO, 67); lcd_tek_data(rl); lcd_tek_data('.'); //преобразование в десятичное представление и индикация лет rlOOO = year / 1000; year = year % 1000; rl00 = year / 100; year = year % 100; rlO = year I 10; rl = year % 10; lcd_pro_data(rlOOO, 70); lcd_tek_data(rlOO); lcd_tek_data(rlO); lcd_tek_data(rl); } //Функция установки текущего значения минут void RTCset_min() { U8 min_tek; RTCstopO; //останов счета RTC min_tek = MIN; min_tek++; if (min_tek > 59) min_tek=0; MIN = min_tek; RTCstartO; //запуск счета RTC } //Функция установки текущего значения часов void RTCset_hour() { U8 hour_tek; RTCstopO; //останов счета RTC hour_tek = HOUR; hour_tek++; if (hour_tek > 23) hour_tek=0; HOUR = hour_tek; RTCstartO; //запуск счета RTC } //Функция обнуления текущего значения секунд void RTCnull_sec() { RTCstopO; //останов счета RTC SEC = 0; RTCstartO; _J/запуск счета RTC } //Функция установки текущего значения дней недели void RTCset_dow() { U8 dow_tek; RTCstopO; //останов счета RTC dow_tek = DOW; dow_tek++; if (dow_tek > 6) dow_tek=0;
33.4. Интерфейс обслуживания RTC 487 DOW = dow_tek; .RTCstartO; //запуск счета RTC } //Функция установки текущего значения дней месяца void RTCset_dom() { U8 dom_tek; RTCstopO; //останов счета RTC dom_tek = DOM; dom_tek++; if (dom_tek > 31) dom_tek=l; DOM = dom_tek; RTCstartO; //запуск счета RTC } //Функция установки текущего значения месяцев void RTCset—month О { U8 month_tek; RTCstopO; //останов счета RTC month_tek = MONTH; month_tek++; if (month_tek > 12) month_tek=l; MONTH = month_tek; RTCstartO; //запуск счета RTC } //Функция установки текущего значения лет void RTCset_year() { U16 year_tek; RTCstopO; //останов счета RTC year_tek = YEAR; year_tek++; if (year_tek > 2030) year_tek=1990; YEAR = year_tek; RTCstartO; //запуск счета RTC } II--------------------------------------------------------------------------- Файл rtc.h //--------------------------------------------------------------------------- //Заголовки и определения обслуживания модуля часов-календаря реального времени RTC //--------------------------------------------------------------------------- #include "hardware.h" // подключение специальных заголовков и определений //Объявление функции инициализации модуля RTC void RTCinit(); //Объявление функции запуска счета модуля RTC void RTCstart(); //Объявление функции останова счета модуля RTC void RTCstop(); //Объявление функции чтения и индикации текущего времени и даты модуля RTC void RTCread_ind_date_time(); //Объявление функции установки текущего значения минут
488 Глава 33. Пользовательские проекты на базе микроконтроллеров LPC2000 void RTCset_min(); //Объявление функции установки текущего значения часов void RTCset_hour(); //Объявление функции обнуления текущего значения секунд void RTCnull_sec(); //Объявление функции установки текущего значения дней недели void RTCset_dow(); //Объявление функции установки текущего значения дней месяца void RTCset_dom(); //Объявление функции установки текущего значения месяцев void RTCset_month(); //Объявление функции установки текущего значения лет void RTCset_year(); 11--------------------------------------------------------------------- Файл main.c программы обслуживания модуля RTC //--------------------------------------------------------------------------- // Основная программа обслуживания RTC 11--------------------------------------------------------------------------- #include <iolpc2129.h> // подключение стандартных заголовков и определений ttinclude "hardware.h" // подключение специальных заголовков и определений #include "rtc.h" // подключение специальных заголовков и определений volatile extern U8 flagn_knO, flagn_knl, flagn_kn2, flagn_kn3; static U8 ledl_old_state=0; //--------------------------------------------------------------------------- void main(void) { CPUinit(); //инициализация системы __disable_int.errupt () ; //запрет прерываний INTERRUPTSinit(); //инициализация прерываний TIMEROinitstart(); //инициализация ТО __enable_interrupt(); //разрешение прерываний RTCinit(); //инициализация модуля RTC delay (10000'00) ; //задержка на сброс ЖКИ lcd_init(); //инициализация ЖКИ delay(1000000); // lcd_clear(); //очистка экрана ЖКИ A_LED1_OFF; //Погасить светодиоды 1, 2 A_LED2_OFF; whiled) //Начало основного цикла { //чтение и индикация текущего времени и даты модуля RTC RTCread_ind_date_time(); if (flagn_kn0==l)'’ _ // нажималась ли кнопка 0 { flagn_kn0=0; //да, сбросить флаг нажатия ledl_old_state++; if (ledl_old_state > 3) ledl_old_state=0; switch(ledl_old_state) j { case 0:
33.4. Интерфейс обслуживания RTC 489 A_LED1_OFF;. // погасить светодиод 1 A_LED2_OFF; // погасить светодиод 2 } break; case 1: { A_LED1_ON; // зажечь светодиод 1 A_LED2_OFF; // погасить светодиод 2 } break; case 2: { A_LED1_OFF; // погасить светодиод 1 A_LED2_ON; // зажечь светодиод 2 } break; case 3: { A_LED1_ON; // зажечь светодиод 1 A_LED2_ON; // зажечь светодиод 2 } } } if (flagn_knl==l) // нажималась ли кнопка 1 { flagn_knl=0; //да, сбросить флаг нажатия switch(ledl_old_ .state) { case 0: { RTCset_hour(); //инкремент текущего значения часов } break; case 1: { RTCset_dom(); //инкремент текущего значения дней месяца } } } if (flagn_kn2==l) // нажималась ли кнопка 2 { flagn_kn2=0; //да, сбросить флаг нажатия switch(ledl_old_state) { “ case 0: { RTCset_min(); //инкремент текущего значения минут } break; case 1: { RTCset_month(); //инкремент текущего значения месяцев
490 Глава 33. Пользовательские проекты на базе микроконтроллеров LPC2000 } } } if (flagn_kn3==l) // нажималась ли кнопка 3 { flagn_kn3=0; //да, сбросить флаг нажатия switch(ledl_old_state) { case 0: { RTCnull_sec(); //обнуление текущего значения секунд } break; case 1: { RTCset_year(); //инкремент текущего значения лет } break; case 2: { RTCset_dow(); //инкремент текущего значения дней недели } } } } } //------------------------------------------------------------------------------ В основном цикле программа производит периодическое чтение и индика- цию на ЖКИ значений текущего времени и даты с помощью функции RTCread_ind_date_time(). Кнопка «0» задает режим установки показаний. Текущий режим индициру- ется светодиодами «1» и «2». При наличии двух светодиодов, может быть задано четыре их состояния (режима установки). Текущий режим определяется в про- грамме значением переменной ledl_old_state. При негорящих светодиодах «1» и «2» (ledl_old_state—0), кнопки «1»...«3» имеют следующие функции: кнопка «1» — инкремент текущего значения часов (от 0 до 23 по кругу), кнопка «2» — инкремент текущего значения минут (от 0 до 59 по кругу), кнопка «3» — обнуление текущего значения секунд (для обеспече- ния точной установки времени). При ledl_old_state=l (светодиод «1» горит, «2» — не горит), кнопки «1»...«3» имеют следующие функции: кнопка «1» — инкремент текущего значения дней месяца (от 1 до 31 по кругу), кнопка «2» — инкремент текущего значения меся- цев (от 1 до 12 по кругу), кнопка «3» — инкремент текущего значения лет (от 1990 до 2030 по кругу). Границы установки текущего значения лет заданы в фун- кции RTCset_year() (файл rtc.c) и при желании могут быть изменены. При ledl_old_state—2 (светодиод «1» не горит, «2» горит), кнопка «3» имеет функцию инкремента текущего значения дней недели (от 0 до 6 по кругу). Функция RTCread_ind_date_time() производит чтение регистров консолиди- рованного времени модуля RTC с помощью соответствующих битовых масок, преобразование полученных значений в десятичное представление и их вывод
33.5. Интерфейс обслуживания АЦП 491 на ЖКИ в удобном для восприятия виде с разделительными точками и двоето- чиями. Дни недели индицируются в виде буквенных аббревиатур «ПН», «ВТ», «СР», «ЧТ», «ПТ», «СБ», «ВС». При пользовательской установке значений вре- мени и даты, соответствующие функции производят сначала остановку счета времени в модуле RTC, с помощью вызова функции RTCstopO (файл rtc.c), затем запись нового значения в регистр счетчика времени RTC, и, наконец, запуск счета времени в модуле RTC с помощью вызова функции RTCstart() (файл rtc.c). При установке значений времени и даты, следует учитывать, что программа не следит за корректностью задания даты и дня недели, а лишь корректно (с уче- том количества дней в текущем месяце и високосных годов) производит даль- нейший счет от установленной пользователем даты. Проверка корректности ус- тановки даты возлагается на самого пользователя. Например, при включении питания функция начальной инициализации модуля RTC RTCinit() записывает в счетчики времени корректные значения, соответствующие показаниям инди- катора «00:00:01 ВС 01.01.2006». Функция начальной инициализации модуля RTC RTCinit(), помимо констант инициализации, содержит команды настройки узла тактирования RTC (предде- лителя) на частоту 32768 Гц, которая генерируется путем деления частоты pclk. Прерывания от RTC в программе не используются, поскольку счет времени в устройстве производится аппаратно и программе нет необходимости «отвле- каться» на изменение содержимого счетчиков времени, а индикация содержи- мого этих счетчиков может производиться в произвольные моменты времени. 33.5. Интерфейс обслуживания АЦП Как и предыдущий проект, предлагаемый ниже интерфейс обслуживания модуля АЦП микроконтроллеров LPC2000 может иметь самостоятельное при- кладное значение. По сути, он представляет собой цифровой вольтметр, кото- рый может быть использован автономно, а также в качестве программно-аппа- ратного дополнения к какому-либо устройству, реализованному на микроконт- роллере LPC2000. Для работы проекта, в базовом макете целевой пользовательской системы (Рис. 33.3) не требуется делать никаких дополнительных аппаратных подключе- ний. Внешнее аналоговое напряжение, которое модуль АЦП использует в ка- честве входного (измеряемого), должно подаваться на вход P0.27/AIN0/CAP0.1/МАТ0.1 (выв. 11 U1). Для задания этого напряжения, к вы- воду Р0.27 можно, например, подключить подвижный контакт переменного ре- зистора, неподвижные контакты которого должны быть подключены к общему проводу и к «плюсу» источника системного питания 3.3 В соответственно. Интерфейс обслуживания модуля АЦП LPC2129 реализован в проекте, все файлы которого находятся в каталоге ADC. Функции обслуживания АЦП, их за- головки и .определения находятся в файлах adc.c и adc.h, а основная программа интерфейса модуля АЦП — в файле main.c этого проекта. Программа цикличес- ки производит одиночные аналого-цифровые преобразования и организует ин- дикацию на ЖКИ результата каждого преобразования в десятичном виде в дис- кретах АЦП и в милливольтах (функция ADCstart_ind_rez()). Запуск каждого преобразования индицируется вспышкой светодиода «1». Дополнительно, про- грамма позволяет прекратить преобразования по нажатию кнопки «1» или во- зобновить их по нажатию кнопки «0». При этом текущее состояние (запрет или разрешение преобразований) индицируется свечением светодиода «2». По
492 Глава 33. Пользовательские проекты на базе микроконтроллеров LPC2000 умолчанию, сразу после включения питания, преобразования запрещены. Что- бы начать их и инициировать вывод результата на индикацию, необходимо на- жать на кнопку «О». Файл adc.c //-------------------------------------------------------------------------- //ПО обслуживания модуля АЦП //-------------------------------------------------------------------------- #include "hardware.h" // подключение специальных заголовков и определений #include "adc.h" // подключение специальных заголовков и определений const U16 Upit_mV = 3284; //напряжение питания V3a в мВ U16 ADCres=0; //результат АЦП в дискретах U16 ADCres_mV=O; //результат АЦП в мВ U8 г1000=0; //------------------------------------ U8 г100=0; // разряды десятичного числа U8 г10=0; // U8 rl=0; //------------------------------------ //Функция инициализации и включения модуля АЦП void ADCinit() { PINSELl_bit.Р0_27 = 0x01; //линию Р0.27 сделать входом АЦП (AIN0) ADCR_bit.SEL - 0x01; //выбрать для преобразований вход AIN0 ADCR_bit.CLKDIV = (int)(14745600 I 4500000) - 1; // тактовая частота АЦП, //в зависимости от PCLK ADCR_bit.BURST =0; // программное управление АЦП ADCR_bit.CLKS =0; //11 тактовых циклов на одно преобразование (10 бит) ADCR_bit.TEST =0; // нормальный режим АЦП ADCR_bit.PDN = 1; // модуль АЦП включить } //Функция запуска однократного преобразования модуля АЦП < //и индикации результата преобразования в десятичном виде в дискретах и мВ void ADCstart_ind_rez() { ADCR_bit.START = 0x001; // немедленно запустить преобразование while(ADDR_bit.DONE == 0); // ожидаем окончания преобразования ADDR_bit.CHN =0; // будем смотреть данные в канале 0 ADCres = ADDR_bit.WDDA; // получение результата АЦП в дискретах ADCreS—mV = (ADCres * Upit_mV) / 1024; //вычисление результата АЦП в мВ //преобразование в десятичное представление и индикация результата АЦП в дискретах rlOOO = ADCres / 1000; ADCres - ADCres % 1000; rl00 = ADCres / 100; ADCres = ADCres % 100г rlO = ADCres / 10; rl = ADCres % 10; lcd_pro_data(rlOOO,0) ; lcd_tek_data(rlOO); lcd_tek_data(rlO); lcd_tek_data(rl); //преобразование в десятичное представление и индикация результата АЦП в мВ
33.5. Интерфейс обслуживания АЦП 493 rlOOO = ADCres.mV / 1ООО; ADCres.mV = ADCres.mV % 1000; rlOO = ADCres.mV I 100; ADCres_mV - ADCres.mV % 100; rlO = ADCres.mV I 10; rl = ADCres.mV % 10; lcd_pro_data(rlOOO,8); lcd.tek.data(rlOO); lcd_tek.data(rlO); lcd_tek.data(rl); lcd_pro_data(rus.m,13); lcd_tek.data('В'); } 11-------------------------------------------------------------------- Файл adc.h //-------------------------------------------------------------------------- //Заголовки и определения обслуживания модуля АЦП //-------------------------------------------------------------------------- #include "hardware.h" // подключение специальных заголовков и определений //Объявление функции инициализации и включения модуля АЦП void ADCinit(); //Объявление функции запуска однократного преобразования модуля АЦП //и индикации результата преобразования в десятичном виде в дискретах и мВ void ADCstart.ind.rez(); //-------------------------------------------------------------------------- Файл main.c программы обслуживания АЦП И--------------------------------------------------------------------------- II Основная программа обслуживания АЦП ц--------------------------------------------------------------------------- #include <iolpc2129.h> // подключение стандартных заголовков и определений #include "hardware.h" // подключение специальных заголовков и определений #include "adc.h" // подключение специальных заголовков и определений volatile extern U8 flagn.knO, flagn.knl, flagn_kn2, flagn_kn3; static U8 adc_stat=0; 11-------------------------------------------------------------------------- void main (void) { CPUinitO; //инициализация системы __disable.interrupt(); //запрет прерываний INTERRUPTSinit() ; //инициализация прерываний TIMEROinitstart(); //инициализация ТО __enable.interrupt(); //разрешение прерываний delay(1000000); //задержка на сброс ЖКИ Icd.init(); //инициализация ЖКИ delay(1000000); И Icd.clear() ; //очистка экрана ЖКИ ADCinit () ; //инициализация и включение модуля АЦП A.LEDl.OFF; //Погасить светодиод 1 A.LED2.OFF; //Погасить светодиод 2
494 Глава 33. Пользовательские проекты на базе микроконтроллеров LPC2000 whiled) //Начало основного цикла { if (adc_stat == 1) //производить циклические преобразования { //запуск однократного преобразования модуля АЦП и индикация // результата преобразования в десятичном виде в дискретах и мВ ADCstart_ind_rez(); A_LED1_ON; // зажечь светодиод 1 delay(200000); // задержка (вспышка) A_LED1_OFF; // погасить светодиод 1 delay(2000000); // задержка (пауза) } if (flagn_kn0==l) // нажималась ли кнопка 0 { flagn_kn0=0; // да, сбросить флаг нажатия adc_stat=l; // разрешить преобразования A_LED2_ON; // зажечь светодиод 2 } if (flagn_knl==l) // нажималась ли кнопка 1 { flagn_knl=0; // да, сбросить флаг нажатия adc_stat=0; // запретить преобразования A_LED2_OFF; // погасить светодиод 2 } } } //--------------------------------------------------------------------- Начальная инициализация модуля АЦП в программе производится функ- цией ADCinit(). В этой функции, в частности, задается тактовая частота модуля АЦП (4.5 МГц), которая генерируется путем деления частоты pclk. Для пересчета результата преобразования из дискрет АЦП в милливольты, программа использует нормировочную константу-множитель UpitjnB, значе- ние которой должно быть равно точному значению напряжения питания V3A в милливольтах, поскольку это напряжение используется в модуле ADC в качест- ве опорного. Входное измеряемое напряжение ADCres_mVв милливольтах вы- числяется в программе по формуле: ADCres_mV= (ADCres х UpitjnV) / 1024, [мВ], где ADCres — результат аналого-цифрового преобразования в дискретах. При номинальном значении опорного напряжения 3.3 В и заданном в функ- ции ADCinit() 10-битном режиме преобразований модуля АЦП, предлагаемый вольтметр позволяет получить разрешающую способность измерений около 3 мВ. Прерывания от модуля АЦП программа не использует. 33.6. Интерфейс обслуживания ШИМ (PWM) Как и предыдущий проект, проект интерфейса обслуживания модуля ШИМ (PWM) микроконтроллера 1РС2ххх также может иметь самостоятельное приклад- ное значение. По сути, он представляет собой программируемый пользователем
33.6. Интерфейс обслуживания ШИМ(PWM) 495 генератор двухфазной импульсной последовательности, который может быть ис- пользован автономно, а также в качестве программно-аппаратного дополнения к какому-либо устройству, реализованному на микроконтроллере LPC2000. Для работы проекта, в базовом макете целевой пользовательской системы (Рис. 33.3) не требуется делать никаких дополнительных аппаратных подключе- ний. Выходные импульсные последовательности ШИМ снимаются с выводов P0.7/SSEL0/PWM2/EINT2 (выв. 31 U1) и P0.8/TXD1/PWM4 (выв. 33 U1). Интерфейс обслуживания модуля ШИМ LPC2129 реализован в проекте, все файлы которого находятся в каталоге PWM. Функции обслуживания ШИМ, их заголовки и определения находятся в файлах pwm.c и pwm.h, а основная про- грамма интерфейса модуля ШИМ — в файле main.c этого проекта. Файл pwm.c // //ПО обслуживания модуля ШИМ (PWM) #include "hardware.h" // подключение специальных заголовков и определений #include "pwm.h" // подключение специальных заголовков и определений U8 г1000000=0;//------------------------------------- U8 г100000=0; // U8 г10000=0; // U8 г1000=0; // разряды десятичного числа U8 г100 = 0р> // U8 г10=0; // U8 rl = 0; //------------------------------------ //Функция инициализации модуля PWM void PWMinit() PINSELO.bit.P0_7 = 0x02; //линию P0.7 сделать выходом PWM2 PINSELO_bit.P0_8 = 0x02; //линию Р0.7 сделать выходом PWM4 PWMPR = 0x0; //предделитель PWM не используется PWMPCR_bit. SEL2 = 1; //управление двойным перепадом в канале 2 PWM PWMPCR_bit. SEL4 = 1; //управление двойным перепадом в канале 4 PWM PWMPCR_bit.ENA2 = 1; //включить выход в канале 2 PWM PWMPCR_bit.ENA4 = 1; //включить выход в канале 4 PWM PWMMCR = 0x0; //все прерывания и действия по совпадению // запретить } //функция задания параметров PWM в каналах 2 и 4 //t_PWM - значение периода PWM в периодах pclk void PWMset(U32 t_PWM) { PWMMRO = .t_PWM; //задание периода PWM PWMMR1 = '(3 *’t_PWM)/8; //задание параметров импульсов в канале 2 PWM PWMMR2 = (5 * t_PWM)/8; PWMMR3 = (7 * t_PWM)/8; // //задание параметров импульсов в канале 4 PWM PWMMR4 = t_PWM/8; // PWMLER = OxlF; //"защелкивание" установленных значений в каналах 0...4 PWM } //Функция включения модуля PWM void PWMstartO
496 Глава 33. Пользовательские проекты на базе микроконтроллеров LPC2000 { PWMTCR_bit.CR = 1; //сброс счетчика и предделителя PWM PWMTCR_bit.СЕ = 1; //разрешение счетчика и предделителя PWM PWMTCR_bit.PWMEN = 1; //разрешить режим PWM PWMTCR_bit.CR = 0; //начало счета счетчика и предделителя PWM } //Функция отключения модуля PWM void PWMstopO { PWMTCR_bit.CR = 1; //сброс счетчика и предделителя PWM PWMTCR_bit.PWMEN = 0; //запрещение режима PWM } //Функция преобразования в десятичное представление и индикации //периода PWM в периодах pclk void PWMt_ind(U32 t_PWM) { rlOOOOOO = t_PWM I 1000000; t_PWM = t_PWM % 1000000; Г100000 = t_PWM I 100000; t_PWM = t_PWM % 100000; Г10000 = t_PWM I 10000; t_PWM = t_PWM % 10000; Г1000 = t_PWM I 1000; t_PWM = t_PWM % 1000; Г100 = t_PWM I 100; t_PWM = t_PWM % 100; rlO = t_PWM I 10; j rl = t_PWM % 10; lcd_pro_data(rlOOOOOO,0); //индикация значения t_PWM с адреса 0 ОЗУ ЖКИ lcd_tek_data(rlOOOOO); // lcd_tek_data(rlOOOO); // lcd_tek_data(rlOOO); // lcd_tek_data(rlOO); // lcd_tek_data(rlO); // lcd_tek_data(rl); // } 11-------------------------------------------------------------------------- Файл pwm.h //-------------------------------------------------------------------------- //Заголовки и определения обслуж модуля PWM 11-------------------------------------------------------------------------- #include "hardware.h" // подключение специальных заголовков и определений //Объявление функции инициализации модуля PWM void PWMinit(); //Объявление функции задания параметров PWM void PWMset(U32); //Объявление функции включения модуля PWM void PWMstart(); //Объявление функции отключения модуля PWM void PWMstopO; //Объявление функции преобразования в десятичное представление и индикации
33.6. Интерфейс обслуживания ШИМ (PWM) 497 //периода PWM в периодах pclk void PWMt.ind(U32); И--------------------------------------------------------------------- Файл main.с программы обслуживания PWM //-------------------------------------------------------------------------- II Основная программа обслуживания PWM ц--------------------------------------------------------------------------- # include <iolpc2129. h> // подключение стандартных заголовков и определений # include "hardware.h" // подключение специальных заголовков и определений # include "pwm.h" // подключение специальных заголовков и определений volatile extern U8 flagn_knO, flagn.knl, flagn_kn2, flagn_kn3; static U8 ledl_old_state=0; static U32 T.PWM; // 1/8 периода PWM в периодах pclk 11-------------------------------------------------------------------------- void main(void) { CPUinitO; //инициализация системы __disable_interrupt(); //запрет прерываний INTERRUPTSinit(); //инициализация прерываний TIMEROinitstart(); //инициализация ТО __enable_interrupt(); //разрешение прерываний delay(1000000); //задержка на сброс ЖКИ lcd_init(); //инициализация ЖКИ delay(1000000); // lcd_clear(); //очистка экрана ЖКИ PWMinitO; //инициализация модуля PWM T.PWM = 1; PWMset(8*T_PWM); //задание параметров PWM в каналах 2 и 4 z A.LED1.OFF; //Погасить светодиоды 1, 2 A.LED2.OFF; ) while(1) //Начало основного цикла { //преобразование в десятичное представление и индикация //периода PWM в периодах pclk PWMt.ind(8*T_PWM); if (flagn_kn0==l) //нажималась ли кнопка 0 { flagn_kn0=0; //да, сбросить флаг нажатия T.PWM++; if (T.PWM > 9999999) T.PWM = 1; PWMset(8*T_PWM); //задание параметров PWM в каналах 2 и 4 } if (flagn.knl==1) //нажималась ли кнопка 1 { flagn.knl=0; //да, сбросить флаг нажатия T.PWM--; if (T.PWM == 0) T.PWM = 1; PWMset(8*T_PWM); //задание параметров PWM в каналах 2 и 4 } if (flagn_kn2==l) //нажималась ли кнопка 3 304 {
498 Глава 33. Пользовательские проекты на базе микроконтроллеров LPC2000 flagn_kn2=0; //да, сбросить флаг нажатия if (ledl_old_state==OFF) { ledl_old_state=ON; PWMset (8*T_PWM) ; PWMstart(); //включение модуля PWM //задание параметров PWM в каналах 2 и 4 A_LED1_ON; //зажечь светодиод 1 } else { ledl_old_state=OFF; //задание нулевых параметров PWM в каналах 2 и 4 PWMset(0); PWMstopO; //отключение модуля PWM A_LED1_OFF; //погасить светодиод 1 } } } } И Программа позволяет организовать одновременную генерацию двух им- пульсных последовательностей, сдвинутых по фазе на 90°. Скважность импуль- сов в последовательностях подобрана таким образом, чтобы между импульсами из разных последовательностей гарантированно не было взаимного перекры- тия. Последнее может оказаться важным, при использовании данной програм- мы, например, в качестве задающего генератора в импульсном источнике пита- ния с двумя ключевыми элементами. Отсутствие перекрытий позволяет избе- жать возникновения сквозного тока через силовые ключи. Временные диаграммы, иллюстрирующие параметры генерируемых программой импуль- сных последовательностей, изображены на Рис. 33.4. Временной интервал T PWM, значение которого отсчитывается в периодах pclk, используется в про- грамме в качестве базового для построения импульсных последовательностей. Период импульсов в каждой последовательности всегда равен восьми интерва- лам T_PWM. Программа использует для своей работы выходы каналов PWM 2 и 4, в каждом из которых производится управление двойным перепадом. Рис, 33,4, Двухфазная импульсная последовательность, генерируемая модулем PWM
33.7. Интерфейс обслуживания UART 499 При нажатии на кнопку «О» значение TPWM инкрементируется, а при на- жатии на кнопку «1» — декрементируется, с немедленным заданием параметров PWM с помощью функции PWMset(8*T_PWM). Диапазон установки значения TPWM в программе выбран от 1 до 9999999, но может быть легко изменен пользователем. Функция задания параметров PWM PWMset(8*T_PWM) работа- ет таким образом, чтобы, при изменении частоты импульсов в обоих каналах, их скважность и относительный фазовый сдвиг оставались бы неизменными. Кнопка «2» позволяет производить включение и отключение модуля PWM, с индикацией его текущего состояния светодиодом «1». Начальная инициализация модуля PWM производится функцией PWMinit(). Текущее значение периода импульсов PWM в программе преобразу- ется в десятичное представление и индицируется на ЖКИ, с помощью функции PWMt_ind(8*T_PWM). Прерывания от модуля PWM программа не использует. 33.7. Интерфейс обслуживания UART Проект интерфейса обслуживания модуля UARTO микроконтроллеров LPC2000 самостоятельного прикладного значения не имеет. Он просто демонс- трирует возможность обмена данными через UARTO между микроконтролле- ром LPC2000 и каким-либо другим устройством, имеющим аналогичный порт UART. В качестве последнего, автор использовал персональный компьютер с запущенной на нем программой эмуляции простого терминала (TELIX, Terminal и т. п.), обслуживающей прием и передачу данных через СОМ-порт компьютера. Используемые в проекте функции обслуживания UARTO могут быть внед- рены в любое устройство или систему на базе микроконтроллера LPC2000, если необходимо организовать обмен через UARTO. Для работы проекта, в базовом макете целевой пользовательской системы не требуется делать никаких дополнительных аппаратных подключений, пос- кольку отладочная плата (Рис. 33.1) уже содержит микросхему-адаптер уровней интерфейса RS-232 U2 МАХ3232, включенную между портом UARTO микро- контроллера и разъемом подключения внешнего устройства RS-232_DB9. СОМ-порт компьютера, используемого в качестве внешнего устройства, необ- ходимо подключить к этому разъему с помощью стандартного кабеля RS-232. Интерфейс обслуживания модуля UARTO LPC2129 [12] реализован в проек- те, все файлы которого находятся в каталоге UART. Функции обслуживания UART, их заголовки и определения находятся в файлах uart.c и uart.h, а основ- ная программа интерфейса модуля UARTO — в файле main.c этого проекта. Файл uart.c //----------Л-------------------------------------------------------- //ПО обслуживания модуля UARTO //------------------------------------------------------------------- #include "hardware.h" // подключение специальных заголовков и определений #include "uart.h" // подключение специальных заголовков и определений volatile U8 rx_byte; //принятый байт через UARTO //Функция инициализации модуля UARTO //(baudrate - желаемая скорость обмена в бодах) void UARTOinit(U16 baudrate)
500 Глава 33. Пользовательские проекты на базе микроконтроллеров LPC2000 PINSELO_bit.Р0_0 = 0x01; //линию РО.О сделать выходом TXDO UARTO PINSELO_bit.Р0-1 = 0x01; //линию Р0.1 сделать входом RXDO UARTO U0LCR_bit.DLAB = 1; //разрешить запись в настройки делителя UARTO U0DLL = 14745600/(16*baudrate); // задание мл. байта скорости обмена U0DLM = ((14745600/(16*baudrate)) » 8); // задание ст. байта скорости обмена UOLCR.bit.DLAB = 0; U0LCR_bit.WLS = 0x03; U0LCR_bit.SBS=1; U0FCR_bit.FCRFE = 1; UOFCR_.bit.RFR = 1; U0FCR_bit.TFR = 1; U0lER_bit.RDAIE = 1; //разрешить обращение к буферам UARTO //длина символа 8 битов //1 столовый бит //разрешить буфер FIFO с уровнем триггера 1 символ //сбросить приемный буфер FIFO //сбросить передающий буфер FIFO //разрешить прерывание по приему данных в буфер //Функция передачи байта через UART0 void UARTOtx_bytе(U8 tx_byte) { while (U0LSR_bit.THRE == 0); //когда буфер передатчика будет пуст U0THR = tx_byte; //запись в буфер передачи UART0 (начать передачу) } //Функция приема байта через UART0 U8 UART0rx_byte() { while (U0LSR_bit.DR= = 0) ; rx_byte = UORBR; //чтение буфера приема UARTO, сброс этим прерывания return гx_by t е; } //------------ -------------------------------------------------------------- Файл uart.h /1-------------------------------------------------------------------------- //Заголовки и определения обелуж модуля UART0 //-------------------------------------------------------------------------- ttinclude "hardware.h" //подключение специальных заголовков и определений //Объявление функции инициализации модуля UART0 void UARTOinit(U16); //Объявление функции передачи байта через UART0 void UART0tx_byte(U8); //Объявление функции приема байта через UART0 U8 UARTOrx_byte(); И--------------------------------------------------------------------------- Файл main.c программы обслуживания UARTO И--------------------------------------------------------------------------- // Основная программа обслуживания UART0 //-------------------------------------------------------------------------- #include <iolpc2129.h> // подключение стандартных заголовков и определений #include "hardware.h" // подключение специальных заголовков и определений #include "uart.h" // подключение специальных заголовков и определений volatile extern U8 flagn_kn0, flagn_knl, flagn_kn2, flagn_kn3;
33.7. Интерфейс обслуживания UART 501 static U8 j=63; //адрес в ОЗУ ЖКИ (адрес индикации) static U8 simw='!'; //индицируемый на ЖКИ символ //--------------------------------------------------------------------------- void main(void) { CPUinit(); //инициализация системы __disable_interrupt(); //запрет прерываний INTERRUPTSinit(); //инициализация прерываний TIMEROinitstart(); //инициализация ТО __enable_interrupt(); //разрешение прерываний delay(1000000); //задержка на сброс ЖКИ lcd_init(); //инициализация ЖКИ delay(1000000); // lcd_clear^(j) ; //очистка экрана ЖКИ UARTOinit(115200); //инициализация модуля UARTO на скорость обмена 115200 бит/с A_LED1_OFF; //Погасить светодиоды 1, 2 A_LED2_OFF; whiled) //Начало основного цикла { if (flagn_kn0==l) //нажималась ли кнопка 0 { flagn_kn0=0; //да, сбросить флаг нажатия 1++; if (1 > 79) { 1 = 64; lcd_clear(); //очистка экрана ЖКИ } simw++; if (simw > ' z') simw = lcd_pro_data (simw, j); //вывести символ на ЖКИ с адресом j ОЗУ ЖКИ UART0tx_byte(simw); //передать символ через UART0 } if (flagn_knl==l) //нажималась ли кнопка 1 { flagn_knl=0; //да, сбросить флаг нажатия UART0tx_byte('0'); UART0tx_byte(’!'); UARTOtx.byte(12') ; UART0tx_byte('3' ) ; UART0tx_byte( ' 4 1 ) ; UART0tx_byte('5'); UART0tx_byte(’6’); UARTOtx_byte('7') ; UART0tx_byte('8 ' ) ; UART0tx_byte('9' ) ; UART0tx_byte('A'); UART0tx_byte(1 В'); UART0tx_byte('C); } }
502 Глава 33. Пользовательские проекты на базе микроконтроллеров LPC2000 } //----------------------------------------------------------------------- В отличие от предыдущих проектов, программа обслуживания UARTO ис- пользует прерывания по приему байта через UARTO, поскольку прием байта от внешнего устройства является для программы событием, о времени наступле- ния которого она «не знает». В файлах hardwares и hardware.h этого проекта до- полнительно содержатся, соответственно, функция-обработчик прерывания по приему байта через UARTO и объявление этой функции. Файл hardware.с этого проекта приведен далее, а фрагмент исходного текста, который необходимо до- бавить в файл hardware.h, выглядит следующим образом: static void UARTOInterrupt(); //объявление функции обработчика //прерываний от UARTO Файл hardware.c программы обслуживания UARTO И-------------------------------------------------------------------------- // Специальные функции (с учетом обслуживания UARTO) ц-------------------------------------------------------------------------- #include "hardware.h" // подключение специальных заголовков и определений #include "uart.h" // подключение специальных заголовков и определений volatile extern U8 rx_byte; //принятый байт через UARTO static U8 i=0; //адрес в ОЗУ ЖКИ (адрес индикации) //Константы инициализации системы #define FOSC 14745600 //Частота кварцевого резонатора в Гц #define VALUEOFM 4 //соответствует PLLCFG_bit.MSEL=3 tfdefine CCLK (FOSC*VALUEOFM) //CCLK = 58.9824 МГц #define PCLK (CCLK/4) //соответствует VPBDIV_bit.VPBDIV=0; #define PLOCK 0x0400 //FCCO = CCLK*2*P = 156...320 МГц, значит, P=2, что соответствует PLLCFG—bit.PSEL=1; #define VIC_TIMER0_bit (1 « VIC_TIMER0) #define VIC_UART0_bit (1 « VIC_UART0) //Инициализация системы --------------------------------------------------- void CPUinit(void) { //Настройка PLL (ФАПЧ) PLLCFG_bit.MSEL=3; //См. расчет PLL в секции #define этого файла PLLCFG^it. PSEL=1; //См. расчет PLL в секции #define этого файла PLLFEED=0xAA; PLLFEED=0x55; PLLCON_bit.PLLE=1; // Включение PLL (ФАПЧ) без подключения к ядру PLLFEED=0xAA; PLLFEED=0x55; while(!(PLLSTAT & PLOCK)); // Ожидание замыкания петли PLL (ФАПЧ) PLLCON_bit.PLLC=1; // Подключение PLL (ФАПЧ) к ядру PLLFEED=0xAA; PLLFEED=0x55; //Инициализация МАМ и тактовой частоты периферии MAMCR_bit.MODECTRL=0; //Первоначальное отключение МАМ MAMTIM_bit.CYCLES=3; //Рекомендуется для CCLK>40 МГц MAMCR_bit.MODECTRL=2; //Включение МАМ (функции МАМ полностью реализуются)
33.7. Интерфейс обслуживания UART 503 VPBDIV_bit.VPBDIV=0; //См. расчет PLL в секции #define этого файла //Инициализация GPIO PINSEL0=0; //Младшие линии РО являются GPIO PINSEL1=O; //Старшие линии РО являются GPIO //задание направлений линий GPIO IO0DIR=0x3000000; //ОЬОООО ООН 0000 0000 0000 0000 0000 0000 Р0.10...Р0.16 - входы // Р0.24, Р0.25- выходы IGlDIR=0xFF0000; //0Ь0000 0000 1111 1111 0000 0000 0000 0000 Pl. 16...Р1.23 - выходы //задание начальных уровней на выходах IO0CLR=0x3000000; // сброс выходов Р0.24, Р0.25 IGlCLR=0xFF0000; //0Ь0000 0000 1111 1111 0000 0000 0000 0000 сброс выходов Pl. 16...Р1.23 } II-------------------------------------------------------------------------- //Инициализация прерываний И--------------------------------------------------------------------------- void INTERRUPTSinit(void) { // MEMMAP =2; // Переотобразит векторы прерываний в SRAM, //в случае выполнения кода в SRAM //Установки контроллера прерываний VICProtection =0; //К регистрам VIC можно обращаться в пользовательском режиме VICIntEnClear = Oxffffffff; // Запретить все прерывания VICDefVectAddr = (U16)kTimerlnterrupt; // Адрес сервисной подпрограммы // обработки прерываний VICIntSelect &= ~VIC_TIMER0_bit; // Линия IRQ от Таймера 0 VICVectAddrl = (U16)kTimerlnterrupt; // Адрес сервисной подпрограммы // обработки прерываний VICVectCntll = 0x20 I VIC_TIMER0; // Разрешить вектор прерывания от Таймера 0 VICIntEnable = VIC_TIMER0_bit; // Разрешить прерывание от Таймера 0 VICIntSelect &= ~VIC_UART0_bit; // Линия IRQ от UARTO. VICVectAddr2 = (U1б)&UART0Interrupt; // Адрес сервисной подпрограммы // обработки прерываний VICVectCntl2 = 0x20 I VIC_UART0; // Разрешить вектор прерывания от UART0. VICIntEnable - VIC_UART0_bit; // Разрешить прерывание от UART0. } //-------------------------------------------------------------------------- #pragma vector=0xl8 __irq __arm void irq_handler(void) { void (*interrupt_function) () ; U16 vector; vector = VICVectAddr; // Поместить адрес вектора в контроллер VIC interrupt_function = (void(*)())vector; (*interrupt_function)(); // Вызов функции вектора прерывания VICVectAddr =0; // Сброс прерывания в VIC } //функция-обработчик прерывания от UART0 ----------------------------------- static void UARTOInterrupt()
504 Глава 33. Пользовательские проекты на базе микроконтроллеров LPC2000 { UARTOrx_byte(); //прием байта через UARTO //сброс прерывания при чтении U0RBR при приеме lcd_pro_data(rx_byte, i); //индикация принятого через UARTO байта i++; if (i > 16) { i = 0; led—clear(); //очистка экрана ЖКИ J } } //функция-обработчик прерывания от TIMERO ---------------------------------- static void Timerlnterrupt() { opros_knO(); //опрос кнопки О opros_knl(); //опрос кнопки 1 opros_kn2(); //опрос кнопки 2 opros_kn3(); //опрос кнопки 3 static U8 old_state; //генерация импульсной последовательности формирования -U для питания ЖКИ if (old—state==OFF) { OUT-U-LCD-UP; //начать импульс -U ЖКИ old_state=ON; } else { OUT—U_LCD—DOWN; //закончить импульс -U ЖКИ old—state=OFF; } TOIR = Oxff; // Сброс линии прерывания от Таймера О } //Инициализация и запуск TIMERO -------------------------------------------- void TIMEROinitstart() { TOTCR = 0; //Отключить Таймер 0 (первый бит регистра!) T0CCR = 0; //Запретить все типы захвата T0EMR = 0; //Запретить все типы совпадения ТОРС = 0; //Предделитель не делит (коэффициент деления =1). T0MR0 = PCLK/1000; //Считать до этого значения. Выходная частота таймера 1000 Гц T0MCR = 3; //Сброс и прерывание от MR0 (регистр совпадения 0). TOTCR = 1; //Включить Таймер 0 (первый бит регистра!) } ц-----------------------L--------------------------------------------------- Начальная инициализация и настройка модуля UART0 в программе произ- водятся функцией UARTOinit(baudrate), где baudrate — желаемая скорость обме- на данными через UART0 в бодах, выбираемая разработчиком из набора стан- дартных значений. Эта скорость задана в программе равной 115200 бит/с. По- мимо скорости обмена, функция задает и другие параметры обмена через UART0: 8 бит данных в посылке, 1 столовый бит, отсутствие бита четности.
33.7. Интерфейс обслуживания UART 505 Нажимая на кнопку «0», пользователь может производить выбор значения байта данных из некоторого подмножества и одновременно его передачу через UARTO. Символ, которому соответствует ASCII-код выбранного байта, при пе- редаче отображается в нижней строке ЖКИ. Передачу байта данных через UARTO осуществляет функция UART0tx_byte(U8 tx_byte). Когда вся нижняя строка ЖКИ заполняется переданными символами данных, функция очищает ее для отображения следующих передаваемых данных. При нажатии на кнопку «1» производится передача через UARTO последовательности из нескольких символов данных «0123456789АВС», при этом на ЖКИ ничего не отображается. Все передаваемые из микроконтроллера LPC2000 символы должны отобра- жаться в приемном окне терминальной программы на компьютере. Вид окна терминальной программы Terminal, при обмене данными с отладочной платой через UART, изображен на Рис. 33.5. Рис. 33.5. Окно терминальной программы Terminal при обмене с LPC2129 через UART В приеме данных через UARTO основная программа функции main() не участвует:. Обработка приема возлагается на функцию-обработчик прерывания по приему байта через UARTO UARTOInterrupt(). Эта же функция обеспечивает и индикацию символа, которому соответствует ASCII-код принятого байта в вер- хней строке ЖКИ. Когда вся строка заполняется принятыми символами дан- ных, функция очищает ее для отображения следующих поступающих данных. В функции UARTOInterrupt(), в свою очередь, производится вызов функции UARTOrx_byte(), производящей чтение приемного буфера UARTO и возвращаю- щей его содержимое.
506 Глава 33. Пользовательские проекты на базе микроконтроллеров LPC2000 33.8. Интерфейс обмена с внешней памятью через 12С В приведенном ниже проекте, демонстрируется обмен по шине 12С между микроконтроллером LPC2129 и внешним устройством, имеющим 12С-совмес- тимый интерфейс. В качестве такого устройства выбрана микросхема энергоне- зависимой многократно программируемой памяти с последовательным досту- пом I2C EEPROM 24LC64 производства фирмы Microchip [13]. Микросхемы памяти указанного типа широко распространены и поставляются на рынок не- сколькими фирмами-производителями (Atmel, Microchip, STM и т. д.). Внут- ренняя память 24LC64 организована в виде массива, состоящего из 8192 8-бит- ных ячеек хранения данных и допускающего побайтное чтение/стирание/за- пись. В реальных проектах на основе микроконтроллеров LPC2000, такое устройство памяти удобно использовать для хранения различных часто изменя- емых пользователем параметров (пользовательских настроек, калибровочных констант, архивных записей и т. д.), поскольку оно имеет весьма значительный ресурс по стиранию/записи (типовое значение 1000000 циклов) по сравнению с ресурсом встроенной Flash-памяти микроконтроллера LPC2000 (типовое зна- чение 10000 циклов). Проект, все файлы которого находятся в каталоге Z2C, разработан с целью продемонстрировать, как происходит обмен между микроконтроллером LPC2129 и микросхемой памяти 24LC64, с использованием аппаратного моду- ля интерфейса I2C LPC2129, в операционных режимах «ведущий передатчик» и «ведущий приемник». Функции и заголовки, относящиеся к модулю 12С LPC2129, содержатся в файлах i2c.c и i2c.h, а функции и заголовки, относящие- ся к организации обмена через I2C с 24LC64 — в файлах 24LC64.C и 24LC64.h. В файле main.c находится основная программа обмена через I2C с 24LC64. Все пе- речисленные файлы программ приведены ниже. Файл iZc.c ц------------------------------------------------------------------------ //ПО обслуживания модуля I2C И------------------------------------------------------------------------ #include "hardware.h" // подключение специальных заголовков и определений ^include "i2c.h" /7 подключение специальных заголовков и определений //Функция инициализации модуля I2C void I2Cinit() { PINSEL0_bit.Р0_2 = 0x01; //линию Р0.2 сделать линией SCL PINSEL0_bit.Р0_3 = 0x01; //линию РО.З сделать линией SDA I2SCLH = 48; //задание длительности цикла SPI в циклах PCLK I2SCLL = 48; //58.9824*МГц/4/(48+48) = 0.1536 МГц (частота SPI) } //----------------------------------------------------------------------- Файл iZc.h ц------------------------------------------------------------------------ //Заголовки и определения обслуживания модуля I2C ц------------------------------------------------------------------------ #include "hardware.h" // подключение специальных заголовков и определений
33.8. Интерфейс обмена с внешней памятью через 12С 507 //Объявление функции инициализации модуля 12С void !2Cinit(); И-------------------------------------------- Файл 24LC64.C //ПО обслуживания 24LC64 hardware.h" 24LC64.h" U16 I2C_addres; //адрес ячейки 24LC64 U8 l2Cwr_byte; U 8 wr_rd; U8 end_rd; extern extern extern extern // подключение специальных заголовков и определений // подключение специальных заголовков и определений //байт данных для записи в 24LC64 //признак записи-чтения 24LC64 (0-запись, 1-чтение) //признак окончания чтения 24LC64 #include #include volatile volatile volatile volatile //Функция записи байта данных в 24LC64 по произвольному адресу void wr_byte24LC64(U8 data_I2C, U16 addr_l2C) { I2C_addres I2Cwr_byte wr_rd = 0; I2CONCLR = I2CONSET = I2CONSET = = addr_I2C; = data_I2C; OxFF; 0x40; 0x20; //задать адрес ячейки 24LC64 //задать байт данных //установить признак //сбросить все флаги //разрешение I2C //передать условие START I2C для записи в 24LC64 записи I2C //Функция чтения байта данных в 24LC64 по произвольному адресу U8 rd_byte24LC64(U16 addr_I2C) . { l2C_addres = addr_I2C; wr_rd = 1; end_rd = 0; I2CONCLR = OxFF; I2CONSET = 0x40; I2CONSET = 0x20; while (end—rd == 0) ; return I2DAT; //задать адрес ячейки 24LC64 //установить признак чтения //сбросить признак окончания чтения //сбросить все флаги I2C //разрешение I2C //передать условие START I2C //ожидать окончания чтения //возврат прочитанного байта Файл 24LC64.h //Заголовки и определения обслуж 24LC64 #include "hardware.h" //подключение специальных заголовков и определений #include "i2c.h" //подключение специальных заголовков и определений //Объявление функции записи байта данных в 24LC64 по произвольному адресу void wr_byte24LC64(U8, U16); //Объявление функции чтения байта данных в 24LC64 по произвольному адресу U8 rd_byte24LC64(U16);
508 Глава 33. Пользовательские проекты на базе микроконтроллеров LPC2000 Файл main.c программы обмена через I2C с 24LC64 ц--------------------------------------------- // Основная программа обмена данными через I2C с 24LC64 //------------------------------------------------------------------------------------------- ^include <iolpc2129.h> //подключение стандартных заголовков и определений ^include "hardware.h" //подключение специальных заголовков и определений #include "i2c.h" //подключение специальных заголовков и определений #include "24LC64.h" //подключение специальных заголовков и определений volatile extern U8 flagn_knO, flagn_knl, flagn_kn2, flagn_kn3; volatile U8 I2C_data = '!'; //байт данных для записи в 24LC64 volatile U16 I2C_addr = 0; //адрес ячейки 24LC64 static U8 I2Crd_byte = 0; //байт данных, прочитанный из 24LC64 U16 I2C_addr_i; //значение адреса ячейки 24LC64 для индикации на ЖКИ U8 г1000=0; //--------------------------------------------- U8 г100=0; // разряды десятичного числа U8 г10=0; // U8 rl=0; //--------------------------------------------- void main(void) { CPUinit(); __disable_interrupt(); INTERRUPTSinit() ; TIMEROinitstart() ; __enable_interrupt(); delay(1000000); lcd_init(); delay(1000000); lcd_clear() ; lcd_pro_data(I2C_data, 0) ; l2Cinit(); A_LED1_OFF; A_LED2_OFF; while(1) //инициализация системы //запрет прерываний //инициализация прерываний //инициализация ТО //разрешение прерываний //задержка на сброс ЖКИ //инициализация ЖКИ //очистка экрана ЖКИ //вывести на ЖКИ с адреса 0 ОЗУ ЖКИ //инициализация модуля I2C //погасить светодиоды 1, 2 //Начало основного цикла if • (flagn_kn0==l) { //нажималась ли кнопка 0 flagn_kn0=0; //да, сбросить флаг нажатия //выбор байта данных для записи в 241С64 I2C_data++; if (I2C_data > 'z') I2C_data = lcd_pro_data(I2Cs_data, 0); //вывести на ЖКИ с адреса 0 ОЗУ ЖКИ if //нажималась ли кнопка 1 //да, сбросить флаг нажатия (flagn_knl==l) { flagn_knl=0; I2C_addr += 50; if (I2C_addr > 8150) I2C_addr =0; //преобразование в десятичное представление и индикация I2C—addr_i = !2C_addr;
33.8. Интерфейс обмена с внешней памятью через 12С 509 rlOOO = I2C_addr_i / 1000; if I2C_addr.i = I2C_addr_i % 1000; rlOO = I2C_addr_i I 100; I2C—addr_i = I2C_addr_i % 100; rlO = I2C_addr_i I 10; rl = I2C_addr_i % 10; lcd_pro_data(rlOOO,5); led—tek_data(rlOO); lcd_tek_data(rlO); lcd_tek_data(rl); } (flagn_kn2==l) //нажималась ли кнопка 2 { flagn_kn2=0; //да, сбросить флаг нажатия //Запись байта данных в 24LC64 по произвольному адресу wr_byte24LC64(!2C_data, I2C_addr); A—LEDl—ON; delay(100000); A_LED1_OFF; //зажечь светодиод 1 //задержка //погасить светодиод 1 (flagn_kn3==l) //нажималась ли кнопка 3 { flagn_kn3 = 0; 11да, сбросить флаг нажатия //Чтение байта данных в 24LC64 по произвольному адресу I2Crd_byte = rd_byte24LC64(I2C_addr); lcd_pro_data(I2Crd_byte,64); //индикация прочитанного байта A—LEDl—ON; //зажечь светодиод 1 delay(100000); //задержка А_LED1—OFF; //погасить светодиод 1 } } } И---------------------------------------------- В отличие от большинства предыдущих проектов, программа обслуживания I2C LPC2129 использует прерывания от 12С, которые аппаратно генерируются при наступлении одного из 25 возможных активных состояний интерфейса 12С. В файлах hardwares и hardware.h этого проекта дополнительно содержатся, со- ответственно, функция-обработчик прерывания от 12С и объявление этой функ- ции. Файл hardwares этого проекта приведен ниже, а фрагмент исходного текста, который необходимо добавить в файл hardware.h, выглядит следующим образом: static void I2CInterrupt(); //объявление функции обработчика прерываний от I2C Файл hardware.с программы обслуживания 12С И----------------------4.-------------------------------------------------- //Специальные функции (с учетом обслуживания I2C) ц-------------------------------------------------------------------------- #include "hardware.h" //подключение специальных заголовков и определений #include "i2c.h" //подключение специальных заголовков и определений //Константы инициализации системы ^define FOSC 14745600 //частота кварцевого резонатора в Гц
510 Глава 33. Пользовательские проекты на базе микроконтроллеров LPC2000 ^define VALUEOFM 4 //соответствует PLLCFG—bit.MSEL=3 ^define CCLK (FOSC*VALUEOFM) //CCLK = 58.9824 МГц ^define PCLK (CCLK/4) //соответствует VPBDIV_bit.VPBDIV=0; #define PLOCK 0x0400 //FCCO = CCLK*2*P = 156...320 МГц, значит, P=2, что соответствует PLLCFG_bit.PSEL=1; #define VIC_TIMER0_bit (1 « VIC_TIMER0) ^define VIC_l2C_bit (1 « VIC_I2C) volatile U16 I2C_addres; //адрес ячейки 24LC64 volatile U8 l2Cwr_byte; //байт данных для записи в 24LC64 volatile U8 wr_rd; //признак записи-чтения ’24LC64 volatile U8 end_rd; //признак окончания чтения 24LC64 static U8 NUM_byte = 0; //порядковый номер переданного байта данных в // 24LC64 //Инициализация системы ---------------------------------------------------- void CPUinit(void) { //Настройка PLL (ФАПЧ) PLLCFG_bit.MSEL=3; //См. расчет PLL в секции ^define этого файла PLLCFG_bit.PSEL=1; //См. расчет PLL в секции ^define этого файла PLLFEED=0xAA; PLLFEED=0x55; PLLCON_bit.PLLE=1; //Включение PLL (ФАПЧ) без подключения к ядру PLLFEED=0xAA; PLLFEED=0x55; while(!(PLLSTAT & PLOCK)); //Ожидание замыкания петли PLL (ФАПЧ) PLLCON_bit.PLLC=1; //Подключение PLL (ФАПЧ) к ядру PLLFEED=0xAA; PLLFEED=0x55; //Инициализация МАМ и тактовой частоты периферии MAMCR_bit.MODECTRL=0; //Первоначальное отключение МАМ MAMTIM_bit.CYCLES=3; //Рекомендуется для CCLK>40 МГц MAMCR_bit.MODECTRL=2; //Включение МАМ (функции МАМ полностью реализуются) VPBDIV_bit.VPBDIV=0; //См. расчет PLL в секции ^define этого файла //Инициализация GPIO PINSEL0=0; //Младшие линии Р0 являются GPIO PINSELl=0; //Старшие линии Р0 являются GPIO //задание направлений линий GPIO IO0DIR=0x3000000; //ОЬОООО ООН 0000 0000 0000 0000 0000 0000 Р0.10...Р0.16 - входы // Р0.24, Р0.25- выходы IGlDIR=0xFF0000; //ОЬОООО 0000 1111 1111 0000 0000 0000 0000 Р1.16...Р1.23 - выходы //задание начальных уровней на выходах IG0CLR=0x3000000; //сброс .выходов Р0.24, Р0.25 IGlCLR=0xFF0000; //ОЬОООО 0000 1111 1111 0000 0000 0000 0000 сброс выходов Pl. 16...Р1.23 } //------------------------------------------------------------------------- //Инициализация прерываний //----------------------------------------------------------------------- void INTERRUPTSinit(void) { // MEMMAP = 2; //переотобразит векторы прерываний в SRAM,
33.8. Интерфейс обмена с внешней памятью через 12С 511 //в случае выполнения кода в SRAM //Установки контроллера прерываний VICProtection = 0; //К регистрам VIC можно обращаться в пользовательском режиме VICIntEnClear = Oxffffffff; //Запретить все прерывания VicDefVectAddr = (U16)&TimerInterrupt; //Адрес сервисной подпрограммы VICIntSelect &= ~VIC_TIMER0_bit; VICVectAddrl = (U16)kTimerlnterrupt; VICVectCntll = 0x20 I VIC_TIMER0; VICIntEnable = VIC_TIMER0_bit; VICIntSelect &= ~VIC_l2C_bit; VICVectAddr2 = (U16)&I2CInterrupt; VICVectCntl2 = 0x20 I VIC.I2C; VICIntEnable = VIC_I2C_bit; } //--------------------------------- //обработки прерывания //Линия IRQ от Таймера 0 //Адрес сервисной подпрограммы //обработки прерывания //Разрешить вектор прерывания от Таймера 0 //Разрешить прерывание от Таймера 0 //Линия IRQ от I2C. //Адрес сервисной подпрограммы //обработки прерывания //Разрешить вектор прерывания от I2C. //Разрешить прерывание от I2C. #pragma vector=0xl8 __irq __arm void irq_handler(void) { void (*interrupt_function)(); U16 vector; vector = VICVectAddr; //Поместить адрес вектора в контроллер VIC interrupt-function = (void(*)())vector; (*interrupt_function)(); //Вызов функции вектора прерывания VICVectAddr =0; //Сброс прерывания в VIC } //функция-обработчик прерывания от I2C ------------------------------------- static void l2CInterrupt() { switch(I2STAT) { case (0x08): //было передано условие START I2CONCLR = 0x20; //сброс флага START I2C I2DAT=174; //передача адреса устройства на шине и признака записи (W)' //174=0Ь10101110: тип устройства I2C - EEPROM (1010), //адрес устройства I2C на шине (111) и признак записи (0) break; case (0x10): //было передано условие повторный START I2CONCLR - 0x20; //сброс флага START I2C I2DAT=175; //передача адреса устройства на шине и признака чтения (R) //175=0Ь10101111: тип устройства I2C - EEPROM (1010) , //адрес устройства I2C на шине (111) и признак чтения (1) //переход в режим ведущего приемника break; case (0x18): //был передан адрес ведомого + W, получен АСК //передача старшего байта адреса ячейки EEPROM 24LC64 I2DAT= (l2C_addres & 0xFF00)»8; //задать порядковый номер переданного байта данных NUM_byte = 0; break; case (0x28): //был передан байт данных, получен АСК
512 Глава 33. Пользовательские проекты на базе микроконтроллеров LPC2000 s wi t ch (NUM__by t e) case (0): //был передан старший байт адреса ячейки //передача младшего байта адреса ячейки EEPROM !2DAT=(l2C_addres & OxFF); //задать порядковый номер переданного байта NUM_byte = 1; break; case (1): //был передан младший байт адреса ячейки switch(wr_rd) { 24LC64 данных case (0): //передача байта данных EEPROM 24LC64 I2DAT=I2Cwr_byte; //задать порядковый номер переданного байта NUM_byte = 2; break; case (1): данных I2CONSET = 0x20; break; default: break; //передать условие //повторный START START I2C break; case (2): I2CONSET = 0x10; //был передан байт //передать условие //задать порядковый номер переданного байта данных NUM_byte = 0; break; default: break; данных STOP I2C case (0x40): I2CONCLR = 0x04; break; case (0x58): I2CONSET = 0x10; end_rd = 1; break; default: break; //был передан //сброс флага адрес ведомого + R, получен АСК ACC I2C, чтобы возвратить NOT АСК байт данных, возвращен NOT АСК //был получен //передать условие STOP I2C //установить признак окончания чтения I2CONCLR = 0x08; //сброс прерывания от 12С //функция-обработчик прерывания от TIMERO static void Timerlnterrupt() opros_kn0(); //опрос кнопки 0 opros_knl(); //опрос кнопки 1 opros_kn2(); //опрос кнопки 2 opros_kn3(); //опрос кнопки 3 static U8 old_state;
33.8. Интерфейс обмена с внешней памятью через 12С 513 //генерация импульсной последовательности формирования -U для питания ЖКИ if (old_state==OFF) { OUT_U_LCD_UP; //начать импульс -U ЖКИ old_state=ON; } else { OUT_U_LCD_DOWN; //закончить импульс -U ЖКИ old_state=OFF; } TOIR = Oxff; //Сброс линии прерывания от Таймера О } //Инициализация и запуск TIMERO ------------------------------------------- void TIMEROinitstart() { TOTCR = 0; //Отключить Таймер 0 (первый бит регистра') T0CCR = 0; //Запретить все типы захвата T0EMR = 0; //Запретить все типы совпадения - ТОРС = 0; //Предделитель не делит (коэффициент деления =1). T0MR0 = PCLK/1000; //Считать до этого значения. Выходная частота таймера // 1000 Гц T0MCR = 3; //Сброс и прерывание от MR0 (регистр совпадения 0). TOTCR = 1; //Включить Таймер 0 (первый бит регистра!) } //------------------------------------------------------------------------- Фрагмент принципиальной схемы подключения 24LC64 к LPC2129, кото- рый необходимо добавить к базовому макету целевой пользовательской систе- мы (Рис. 33.3), приведен на Рис. 33.6. Соединительные разъемы на схеме услов- но не показаны. L 304 Рис. 33.6. Фрагмент принципиальной схемы, добавляемый К базовому макету при подключении 24LC64
514 Глава 33. Пользовательские проекты на базе микроконтроллеров LPC2000 Временные диаграммы записи и чтения байта I2C EEPROM 24LC64 по про- извольному адресу приведены, соответственно, на Рис. 33.7а, б. Адресация ведо- мого устройства (микросхемы 24LC64) 7-битная, а адрес ячейки I2C EEPROM пе- редается двумя байтами, так как микросхема имеет емкость большую, чем 256 байт. Первые четыре бита в 7-битном адресе ведомого устройства являются мас- кой, установленной разработчиками стандарта для микросхем EEPROM 12С — 1010, а оставшиеся три бита образуют собственный адрес ведомого устройства на шине, равный 111. Этот адрес задается подачей на адресные входы 24LC64 АО, Al, А2 (Рис. 33.6) соответствующих (ВЫСОКИХ) логических уровней. Процедура фиктивной записи Активность т 2 ведущего д Байт Старший байт Младший байт Передаваемый Т у р R управления адреса ячейки адреса ячейки байт данных О Ту_________.________( ,_________*________s ,_________._________v ,_________.________v Р Активность А шины С (ведомого К устройства) А А А С С С К К К X = незнача- щий бит Процедура фиктивной записи Активность А А А шины С С С (ведомого К К К устройства) X = незнача- щий бит > N О S Принимаемый байт данных Рис. 33.7. Временные диаграммы записи (а) и чтения (б) байта I2C EEPROM 24LC64 по произвольному адресу Чтобы обеспечить возможность записи и чтения по произвольным адресам, программа производит процедуру так называемой фиктивной записи — это об- ращение к ячейке памяти без собственно записи или чтения (указание внутрен- ней логике микросхемы 24LC64 на ячейку для последующих записи или чте- ния). В случае осуществления после этой процедуры записи по произвольному адресу, ведущее устройство выдает на шину байт данных записи, дожидается от ведомого устройства подтверждения и завершает всю процедуру обмена услови- ем STOP. Если после процедуры фиктивной записи осуществляется чтение по произвольному адресу, ведущее устройство повторно генерирует условие START, повторно выдает на шину адрес ведомого устройства (байт управления),
33.8. Интерфейс обмена с внешней памятью через 12С 515 уже с признаком чтения, дожидается подтверждения, а затем принимает пере- даваемый ведомым устройством байт данных для чтения. По завершении при- ема байта данных, ведущее устройство выдает на шину бит неподтверждения (NOT АСК) и завершает всю процедуру чтения выдачей условия STOP. Приведенная в файле main.c программа обмена с 24LC64 через интерфейс 12С работает следующим образом: • При нажатии на кнопку «О», производится выбор байта данных для запи- си в I2C EEPROM. Символ, соответствующий ASCII-коду выбранного байта данных, индицируется по адресу О ОЗУ ЖКИ. • При нажатии на кнопку «1», производится перебор адресов ячеек для за- писи данных в I2C EEPROM, но не подряд, а с некоторым интервалом (в программе он равен 50). Выбранное значение адреса ячейки, в десяти- чном виде, отображается на ЖКИ с адреса 5 ОЗУ ЖКИ. • При нажатии на кнопку «2», производится запись выбранного байта дан- ных в EEPROM по выбранному ранее адресу. Вызов функции записи со- провождается короткой вспышкой светодиода «1». • При нажатии на кнопку «3», производится чтение байта данных из 12С EEPROM по выбранному ранее адресу. Прочитанный байт данных (его значение воспринимается как ASCII-код) индицируется в виде символа по адресу 64 ОЗУ ЖКИ. Возврат управления к функции чтения сопро- вождается короткой вспышкой светодиода «1». Настройка модуля I2C LPC2129 производится путем вызова функции I2Cinit(). Запись байта данных в I2C EEPROM по произвольному адресу осу- ществляется путем вызова функции wr_byte24LC64(data_I2C, addr_I2C). Эта функция не удерживает управление во время записи, а только инициирует про- цесс записи, запуская процедуру START 12С. Все дальнейшие необходимые для обмена по шине действия логики I2C LPC2129 осуществляются с помощью функции-обработчика прерывания от I2C — I2CInterrupt(), расположенной в файле hardwares. Эта функция обрабатывает несколько из 25 возможных актив- ных состояний интерфейса 12С, с учетом того, что в функции wr_byte24LC64(data_I2C, addr_I2C) был установлен программный признак запи- си (переменной wr_rd было присвоено значение 0). Помимо этого, в функции I2CInterrupt() используется переменная NUMbyte, текущее значение которой задает порядковый номер переданного по шине байта (старший и младший байты адреса ячейки, байт передаваемых данных). Таким образом, функция wr_byte24LC64(data_I2C, addr_I2C) «не знает», завершил ли модуль 12С запись в , ведомое устройство. Проверка готовности ведомого устройства к следующей за- писи в программе не производится (при желании, она может быть реализована средствами модуля I2C LPC2129). Обработка активных состояний интерфейса 12С производится функцией I2C Interrupt), с помощью вложенных друг в друга программных конструкций, именуемых в языке С «переключателями». Чтение байта данных в I2C EEPROM по произвольному адресу осуществля- ется путем вызова функции rd_byte24LC64(addr_I2C). В отличие от предыдущего случая, эта функция возвращает управление только после окончания чтения, детектируя это событие по текущему значению переменной end_rd (признак окончания чтения), которую она сбрасывает перед началом чтения, а затем ожидает ее установки. Признак окончания чтения end_rd устанавливается фун- кцией I2CInterrupt() после передачи логической схемой интерфейса 12С LPC2129 условия STOP 12С.
516 Глава 33. Пользовательские проекты на базе микроконтроллеров LPC2000 33.9. Интерфейс обмена с внешним устройством через SPI Модуль последовательного периферийного интерфейса SPI микроконтрол- лера LPC2000 в предлагаемом ниже проекте используется для обмена данными с внешним устройством, в качестве которого выступает микросхема AD7705 производства фирмы «Analog Devices» [14]. Микросхема AD7705 представляет собой 2-канальное сигма-дельта-АЦП с встроенными модулями SPI, входного аналогового буфера, программируемого усилителя, тактового генератора и ре- гистрового банка контроля и управления. Взаимодействие микроконтроллера LPC2000 с AD7705 через SPI иллюстри- руется проектом, все файлы которого находятся в каталоге SPI. Функции и за- головки, относящиеся к модулю SPIO LPC2129, содержатся в файлах spi.c и spi.h. Функции и заголовки, относящиеся к организации обмена через SPI с AD7705 и к функционированию самой этой микросхемы, содержатся в файлах AD7705.с и AD7705.h. Основная программа, реализующая проект, содержится в файле main.c. Все перечисленные файлы приведены ниже в этом разделе. Файл spi.c //-------------------------------------------------------------------------- //ПО обслуживания модуля SPIO //-------------------------------------------------------------------------- #include "hardware.h" //подключение специальных заголовков и определений #include "spi.h" //подключение специальных заголовков и определений volatile U8 rx_byte; //принятый через SPIO байт //Функция инициализации модуля SPIO void SPlOinit() { PINSELO_bit.P0_4 = 0x01; //линию P0.4 сделать выходом SCK SPIO PINSEL0_bit.P0_5 = 0x01; //линию P0.5 сделать входом MISO SPIO PINSEL0_bit.P0_6 = 0x01; //линию P0.6 сделать выходом MOSI SPIO PINSEL0_bit.P0_7 = 0x01; //линию P0.7 сделать входом SSEL SPIO S0SPCCR_bit.COUNTER = 40; //задание длительности цикла SPI в циклах PCLK //58.9824 МГц/4/40 = 0.36864 МГц S0SPCR_bit.СРНА = 1; //СРНА = 1 S0SPCR_bit.CPOL = 1; //CPOL = 1 S0SPCR_bit.MSTR = 1; //режим SPIO - мастер S0SPCR_bit.LSBF = 0; //первым передается MSB (старший значащий бит) S0SPCR_bit.SPIE = 0; //прерывания от SPI0 запрещены } //Функция передачи байта и приема байта через SPI0 U8 SPl0rx_tx_byte(U8 tx_byte) { S0SPDR = tx_byte; //запирьв регистр данных SPIO (начать // передачу) while (S0SPSR_bit.SPIF == 0); //ожидать окончания передачи rx_byte = S0SPDR; //прочитать принятые данные (сбросив SPIF) return rx_byte; } И----------------------------------------------------------------------
33.9. Интерфейс обмена с внешним устройством через SPI 517 Файл spi.h //-----------------------------------------’-------------------------------- //Заголовки и определения обслуживания модуля SPIO //-------------------------------------------------------------------------- #include "hardware.h" //подключение специальных заголовков и определений //Объявление функции инициализации модуля SPIO void SPIOinit(); //Объявление функции передачи байта и приема байта через SPIO U8 SPl0rx_tx_byte(U8); Файл AD7705.C И--------------------------------------------------------------------------- //ПО обслуживания AD7705 //-------------------------------------------------------------------------- #include "hardware.h" //подключение специальных заголовков и определений #include "AD7705.h" //подключение специальных заголовков и определений const U16 Uref_V = 25000; //опорное напряжение АЦП в вольтах/10000 (0.1 мВ) U8 AD7705rx_byte; //принятый байт через SPIO из AD7705 U8 г10000=0; //------------------------------------- U8 г1000=0; // U8 г100=0; //разряды десятичного числа U8 г10=0; // U8 rl=0; //------------------------------------- //Функция инициализации линий CS и RES AD7705 void AD7705_CS_RES() { //задание направлений линий GPIO, обслуживающих AD7705: //Р0.8 - CS, Р0.9 - RES IO0DIR=0x3000300; //ОЬОООО ООН 0000 0000 0000 ООН 0000 0000 Р0.8, Р0.9 - выходы } //Функция сброса AD7705 через SPIO void AD7705reset() { OUT_CS_AD7705_UP; //установка линии CS AD7705 OUT_RES_AD7705_DOWN; //сброс линии RES AD7705 delay(100000); //задержка на сброс AD7705 OUT_RES_AD7705_UP; //установка линии RES AD7705 delay(100000); //задержка } //ФункцияПередачи байта и приема байта через SPIO для AD7705 U8 AD7705rx_tx_byte(U8 tx_byte) { OUT_CS_AD7705_DOWN; //сброс линии CS AD7705 delay(50); //задержка AD7705rx_byte = SPI0rx_tx_byte(txjoyte); //прием/передача байта delay(50); //задержка OUT_CS_AD7705_UP; //установка линии CS AD7705 return AD7705rx_^yte; //Функция инициализации AD7705 через SPIO void AD7705init()
518 Глава 33. Пользовательские проекты на базе микроконтроллеров LPC2000 { AD7705rx_tx_byte(0x20); //запись в регистр связи - //последует запись в регистр синхронизации AD7705rx_tx_byte(0x09); //запись в регистр синхронизации: //тактовый генератор включен, частота делится //частота фильтра 25 Гц AD7705rx_tx_byte(0x10); //запись в регистр связи - //последует запись в регистр установок AD7705rx_tx_byte(0x46); //запись в регистр установок: //внутренняя калибровка, усиление = 1, //униполярный режим, буфер включен, фильтр запущен } //Функция одного измерения AD7705 и индикации результата в десятичном виде, //в дискретах АЦП и вольтах void AD7705izm_ind() { U16 H_rez_AD7705; //старший байт результата АЦП U16 L_rez_AD7705; //младший байт результата АЦП U16 Res_AD7705_V; //результат АЦП в В Opros_AD7705: //метка начала цикла измерений AD7705rx_tx_byte(0x08); //запись в регистр связи - //последует чтение регистра связи AD7705rx_tx_byte(0x00); //чтение регистра связи if BIT_TEST(AD7705rx_byte,7) goto Opros_AD7705; AD7705rx_tx_byte(0x38); //запись в регистр связи - //последует чтение регистра данных H__rez_AD7705 = AD7705rx_tx_byte(0x00); //чтение регистра данных //(старший байт АЦП) L_rez_AD7705 = AD7705rx_tx_byte(0x00); //чтение регистра данных //(младший байт АЦП) H_rez_AD7705 = (H_rez_AD7705 «8) I L_rez_AD7705; //формирование результата Res_AD7705_V = (H_rez_AD7705 * Uref_V) / 65536; //вычисление результата АЦП // в вольтах/10000 (0.1 мВ) //преобразование в десятичный вид и индикация результата АЦП в дискретах Г10000 = H_rez_AD7705 / 10000; H_rez_AD7705 = H_rez_AD7705 % 10000; rlOOO = H_rez_AD7705 / 1000; H_rez_AD7705 = H_rez_AD7705 % 1000; Г100 = H_rez_AD7705 / 100; H_rez_AD7705 = H_rez_AD7705 % 100; rlO = H_rez_AD7705 / 10; rl = H_rez_AD7705 % 10; lcd_pro_data(rlOOOO,0)j. lcd_tek_data(rlOOO); t lcd_tek_data(rlOO); lcd_tek_data(rlO); lcd_tek_data(rl); //преобразование в десятичное представление и индикация результата АЦП в вольтах rlOOOO = Res_AD7705_V / 10000; Res_AD7705_V = Res_AD7705_V % 10000; rlOOO = Res_AD7705_V I 1000; Г Res_AD7705_V = Res_AD7705_V % 1000; (
33.9. Интерфейс обмена с внешним устройством через SPI 519 rlOO = Res_AD7705_V / 100; Res_AD7705_V = Res_AD7705_V % 100; rlO = Res_AD7705_V I 10; rl = Res_AD7705_V % 10; Icd_pro_data(r10000,64); lcd_tek_data(','); lcd_tek_data(rlOOO); lcd_tek_data(rlOO) ; lcd_tek_data(rlO); lcd_tek_data(rl); lcd_pro_data('В', 71) ; } Файл AD7705.h I/------------------------------------------------------------------------- //Заголовки и определения обслуживания AD7705 I/------------------------------------------------------------------------- #include "hardware.h" //подключение специальных заголовков и определений #include "spi.h" //подключение специальных заголовков и определений //Макросы сброса и установки выходов, производящих сброс (RES) и выбор (CS) AD7705 #define OUT_CS_AD7705_DOWN IO0CLR_bit.P0_8=l #define OUT_CS_AD7705_UP IO0SET_bit.P0_8=l #define OUT_RES_AD7705_DOWN IO0CLR_bit.P0_9=l #define OUT_RES_AD7705_UP IO0SET_bit.P0_9=l //Объявление функции инициализации линий CS и RES AD7705 void AD7705_CS_RES(); //Объявление функции сброса AD7705 через SPIO void AD7705reset(); //Объявление функции передачи байта и приема байта через SPIO для AD7705 U8 AD7705rx_tx_byte(U8); //Объявление функции инициализации AD7705 через SPIO void AD7705init(); //Объявление функции одного измерения AD7705 через SPIO и индикации результата //в десятичном виде, в дискретах АЦП и вольтах void AD7705izm_ind(); Файл main.c программы обслуживания SPI ц-------------------------------------------------------------------------- II Основнцяпрограмма обслуживания SPI И-------------------------------------------------------------------------- #include <iolpc2129.h> //подключение стандартных заголовков и определений #include "hardware.h" //подключение специальных заголовков и определений #include "spi.h" //подключение специальных заголовков и определений #include "AD7705.h" //подключение специальных заголовков и определений volatile extern U8 flagn_kn0, flagn_knl, flagn_kn2, flagn_kn3; //-------------------------------------------------------------- void main(void) { CPUinit(); //инициализация системы __disable_interrupt(); //запрет прерываний INTERRUPTSinit(); //инициализация прерываний TIMEROinitstart(); //инициализация ТО
520 Глава 33. Пользовательские проекты на базе микроконтроллеров LPC2000 __enable_interrupt(); delay(1000000); lcd_init(); delay(1000000); lcd_clear(); SPlOinit(); AD7705_CS_RES(); AD7705reset() ; AD7705init() ; A_LED1_OFF; A_LED2_OFF; while(1) //разрешение прерываний //задержка на сброс ЖКИ //инициализация ЖКИ //очистка экрана ЖКИ //инициализация модуля SPIO //Инициализация линий CS и RES AD7705 //Сброс AD7705 через SPIO //Инициализация AD7705 через SPIO //Погасить светодиоды 1, 2 //Начало основного цикла AD7705izm_ind(); //измерение AD7705 и индикация результата в десятичном виде, //в дискретах АЦП и вольтах //задержка (flagn_kn0= = l) delay(100000) if //нажималась ли кнопка О flagn_kn0=0; A_LED1_ON; AD7705reset() ; AD7705init() ; A_LED1_OFF; } //да, сбросить флаг нажатия //зажечь светодиод 1 //сброс AD7705 через SPIO //инициализация AD7705 через SPIO //погасить светодиод 1 По существу, предлагаемый проект представляет собой цифровой вольтметр с разрешающей способностью около 0.0001В и диапазоном входного напряже- ния 0...2.5 В. Фрагмент принципиальной схемы подключения AD7705 к LPC2129, кото- рый необходимо добавить к базовому макету целевой пользовательской систе- мы (Рис. 33.3), приведен на Рис. 33.8. Соединительные разъемы на схеме услов- но не показаны. Помимо «штатных» сигнальных линий интерфейса SPI (MISO, MOSI, SCLK и CS), программа использует вход сброса RESET микросхемы AD7705, при подаче на который внешнего НИЗКОГО уровня производится сброс внут- ренней логики, цифрового фильтра, аналогового модулятора AD7705 и запись в регистры AD7705 заданных по умолчанию значений. Микросхеме AD7705 требуется для работы внешнее опорное напряжение, для получения которого используется микросхема источника опорного напряжения AD780 [15]. Опорное напряжение, вырабатываемое AD780, составляет 2.5 В. Со- ответственно, входное измеряемое напряжение AD7705 может лежать в диапазо- не от 0 до +2.5 В. Тактироваться AD7705 может от встроенного генератора с вне- шним кварцевым резонатором на частоту 1 МГц, 2 МГц, 2.4576 МГц или 4.9152 МГц. Чтобы повысить эффективную разрешающую способность аналого- цифровых преобразований при^использовании AD7705, целесообразно разде- лить общий провод в схеме на аналоговую и цифровую «земли», как показано на Рис. 33.8, причем, соединяться между собой эти «земли» должны в одной точке (лучше всего, непосредственно на отрицательном выводе источника питания).
33.9. Интерфейс обмена с внешним устройством через SPI 521 Рис, 33,8, Фрагмент принципиальной схемы подключения AD7705 и AD780 к базовому макету пользовательской системы Аналоговые входные каналы Рис, 33.9. Упрощенная структурная схема AD7705
522 Глава 33. Пользовательские проекты на базе микроконтроллеров LPC2000 Упрощенная внутренняя блок-схема AD7705 изображена на Рис. 33.9. Уст- ройство имеет регистровый банк, состоящий из нескольких регистров, предна- значенных для управления и конфигурирования. К каждому из них можно об- ращаться через SPI. Первый регистр в банке называется регистром связи. Этот 8-битный регистр управляет выбором канала АЦП, определяет является ли сле- дующая операция SPI операцией записи или чтения, а также определяет из ка- ких регистров последует чтение и какие регистры будут доступны для записи в ходе следующего обращения. Сеанс обмена с AD7705 через SPI, с целью произ- вести запись или чтение любого регистра устройства, всегда должен начинаться с записи в регистр связи. Регистр связи содержит также бит занятости устройс- тва (бит 7) DRDY. НИЗКИЙ уровень DRDY означает, что результат последнего преобразования, находящийся в 16-битном регистре данных AD7705 после за- вершения преобразования или автокалибровки, доступен для чтения. Если бит DRDY установлен (в ВЫСОКИЙ уровень), то чтение результата АЦП запреще- но. Состояние бита DRDY всегда совпадает с состоянием одноименного логи- ческого выхода микросхемы, таким образом опрос готовности к чтению резуль- тата АЦП ведущее устройство может производить и без участия SPI. Назначе- ние отдельных битов регистра связи приведено в Табл. 33.1. Таблица 33.1. Назначение битов регистра связи AD7705 Название Номера битов Назначение битов DRDY 7 Для успешного проведения операции записи в этот бит должен быть запи- сан НИЗКИЙ уровень (логического 0). При операции чтения этот бит отображает состояние флага DRDY (и соот- ветствующего выхода). НИЗКИЙ уровень означает, что 16-битное слово результата преобразования в регистре данных доступно для чтения. ВЫ- СОКИЙ уровень означает, что результат преобразования недоступен для чтения RS2...RS0 6...4 Биты выбора регистра. Эти биты определяют к какому из семи регистров AD7705 будет обращена последующая операция чтения или записи. ООО — регистр связи, 001 — регистр установок, 010 — регистр синхронизации, 011 — регистр данных, 100 — регистр теста, 101 — нет операции, ПО — регистр калибровки смещения, 111 — регистр калибровки усиления R/W 3 Бит выбора чтения/записи. Этот бит определяет будет ли следующая опе- рация чтением (значение бита равно логической 1) или записью (значение бита равно логическому 0) STBY 2 Установка этого бита в 1 переводит AD7705 в режим ожидания с понижен- ным энергопотреблением. Сброс этого бита в 0 возвращает устройство в нормальный режим СН1,СН0 1,0 Биты выбора канала для преобразования или для доступа к калибровоч- ным коэффициентам. Калибровочные коэффициенты сохраняются в трех парах калибровочных регистров. 00 — AIN1(+) — AIN1(—), пара регистров 0, 01 — AIN2(+) - AIN2(-), пара регистров 1, 10 — AINl(-) - AINl(-) (внутреннее замыкание AIN1 на себя), пара ре- гистров 0, 11 — AINl(-) — AIN2(—), пара регистров 2
33.9. Интерфейс обмена с внешним устройством через SPI 523 Следующий регистр AD7705 называется регистром установок. Содержимое этого 8-битного регистра определяет текущую операцию, производимую АЦП, значение коэффициента усиления программируемого усилителя, состояние входного буфера и цифрового фильтра АЦП. Назначение отдельных битов ре- гистра установок приведено в Табл. 33.2. Таблица 33.2. Назначение битов регистра установок AD7705 Название Номера битов Назначение битов MD1,MDO 7,6 Биты задания режима операций. 00 — нормальный режим выполнения преобразований. 01 — режим внутренней калибровки в выбранном канале. Внутренняя калибровка включает автокалибровку смещения и автокалибровку усиления, которые проводятся последовательно в автоматическом ре- жиме. По окончании внутренней калибровки, устройство переходит в нормальный режим, а биты MD0 — MD1 сбрасываются. 10 — режим системной калибровки смещения в выбранном канале. Перед проведением этой калибровки, на вход выбранного канала не- обходимо подать напряжение системного нуля. По окончании систем- ной калибровки смещения, устройство переходит в нормальный ре- жим, а биты MD0 и MD1 сбрасываются. 11 — режим системной калибровки усиления в выбранном канале при выбранном усилении. Перед проведением этой калибровки, на вход выбранного канала необходимо подать напряжение системного верх- него предела, с учетом выбранного усиления. По окончании систем- ной калибровки усиления, устройство переходит в нормальный ре- жим, а биты MD0 и MD1 сбрасываются G2...G0 5...3 Биты выбора значения коэффициента усиления программируемого усилителя. 000- 1, 001 - 2, 010-4, 011-8, 100-16, 101-32, 110-64, 111-128 B/U 2 Бит выбора биполярного/униполярного режима. Этот бит задает уни- полярный режим (значение бита равно логической 1) или биполярный режим (значение бита равно логическому 0) BUF 1 Бит управления буфером. Запись в этот бит логической 1 включает входной аналоговый буфер. Запись в этот бит логического 0 отключает (замыкает) буфер FSYNC 0 Бит синхронизации фильтра. Если этот бит установлен, цифровой фильтр находится в исходном (сброшенном) состоянии. Если этот бит сброшен, цифровой фильтр обрабатывает данные Содержимое 8-битного регистра синхронизации AD7705 задает значения параметров, связанных с синхронизацией и частотой обновления выходных данных АЦП. Назначение отдельных битов регистра синхронизации приведено в Табл. 33.3.
524 Глава 33. Пользовательские проекты на базе микроконтроллеров LPC2000 Таблица 33.3. Назначение битов регистра синхронизации AD7705 Название Номера битов Назначение битов ZERO-ZERO 7...5 В эти биты всегда должны быть записаны «нули», чтобы гарантировать корректность операций AD7705 CLKDIS 4 Бит отключения задающего генератора. Запись в этот бит логической 1 отключает выход задающего генератора от вывода MCLK OUT. При ис- пользовании внешнего кварцевого резонатора, запись логической 1 в бит CLKDIS останавливает тактовый генератор и прекращает преобра- зования CLKDIV 3 Бит делителя тактового сигнала. Если этот бит установлен (в логичес- кую 1), то тактовая частота, подаваемая на вывод MCLK IN, делится на 2, прежде чем будет использована для тактирования внутренних узлов AD7705 CLK 2 Бит тактирования. Если тактовая частота равна 2.4576 МГц (CLKDIV = 0) или 4.9152 МГц (CLKDIV = 1), то бит CLK должен быть установлен. Если тактовая частота равна 1 МГц (CLKDIV = 0) или 2 МГц (CLKDIV = 1), то бит CLK должен быть сброшен. Соместно с би- тами FS1, FS0, бит CLK задает частоту обновления выходных данных устройства FS1, FS0 1.0 Биты выбора выходной частоты цифрового фильтра (частоты обновле- ния выходных данных). CLK = 0: 00 — частота обновления выходных данных 20 Гц, 01 — частота обновления выходных данных 25 Гц, 10 — частота обновления выходных данных 100 Гц, 11 — частота обновления выходных данных 200 Гц. CLK= 1: 00 — частота обновления выходных данных 50 Гц, 01 — частота обновления выходных данных 60 Гц, 10 — частота обновления выходных данных 250 Гц, 11 — частота обновления выходных данных 500 Гц После завершения аналого-цифрового преобразования его результат попа- дает в 16-битный регистр данных. В отличие от регистров связи, установок и синхронизации, доступных для чтения и записи, регистр данных доступен толь- ко для чтения. По окончании произведенного при НИЗКОМ уровне бита (вы- хода) DRDY чтения слова регистра данных, этот бит (а также одноименный вы- ход) будет установлен в ВЫСОКИЙ уровень. Если чтение регистра данных пос- ле завершения преобразования не производилось, то DRDY автоматически перейдет в ВЫСОКИЙ уровень за 500 периодов тактовой частоты до начала следующего преобразования. Рекомендуемая производителем AD7705 блок-схема алгоритма получения результатов преобразования, при обмене через SPI между AD7705 и ведущим устройством (микроконтроллером), изображена на Рис. 33.10. Аппаратный мо- дуль интерфейса SPI ЭА7705-требует задания параметров СРНА = 1, SPOL = 1. Для получения информации о временных характеристиках SPI DA7705, обрати- тесь к оригинальной документации производителя. Помимо вышеперечисленных регистров, AD7705 содержит также 8-битный регистр теста, 24-битный регистр калибровки «нуля» (смещения) и 24-битный регистр калибровки верхнего предела (усиления). Поскольку управляющая программа данного проекта непосредственно не имеет дела с этими регистра- ми, их описания здесь не приводятся.
33.9. Интерфейс обмена с внешним устройством через SPI и 525 Рис. 33.10. Блок-схема получения результатов АЦП AD7705 Работа программы (main.c) осуществляется следующим образом. После на- чальной инициализации системы LPC2129 и контроллера ЖКИ, производит- ся инициализация модуля SPIO LPC2129 (функция SPI0init()), затем инициа- лизация линий CS и RES, в качестве которых используются, соответственно, линии Р0.8 и Р0.9 LPC2129 (функция AD7705_CS_RES()). Затем производится сброс AD7705 по линии RESET (функция AD7705reset()) и инициализация AD7705 через SPI (функция AD7705init()). Далее начинается основной цикл программы, состоящий из процедуры опроса кнопки «О», небольшой програм- мной задержки, чтения результата преобразования AD7705 и вывода его на ин- дикацию в десятичном виде в дискретах АЦП и в вольтах (функция AD7705izm_ind()) в формате Х.ХХХХ В. AD7705 программно конфигурируется для выпотшения внутренней калибровки с последующим автоматическим пе- реходом в нормальный режим преобразований с частотой обновления выход- ных данных 25 Гц. Вычисление результата преобразования Res_AD7705_V в единицах 0.0001В производится в программе по следующей формуле: Res_AD7705_V= (H_rez_AD7705 х Uref_V) / 65536, где H_rez_AD7705 — результат АЦП в дискретах, Uref_V — калибровочная константа-множитель, равная 25000.
526 Глава 33. Пользовательские проекты на базе микроконтроллеров LPC2000 При необходимости, нажав на кнопку «О», можно произвести повторный сброс и инициализацию AD7705, вызвав последовательно функции AD7705reset() wAD7705init(). На время передачи управления этим функциям за- горается светодиод «1». Для удобства пользователя, вызов этих функций по на- жатию кнопки отмечается короткой вспышкой светодиода. Аппаратную поддержку интерфейса SPIO LPC2129 в программе реализует функция SPIOrx_tx_byte(tx_byte). Она осуществляет запись в ведомое устройство SPI одного байта данных (tx_byte), с одновременным чтением из ведомого уст- ройства одного байта данных, который и возвращает (rxjbyte). Функция возвра- щает управление по окончании обмена байтами. Прерывания от SPI программа не использует. 33.10. Обслуживание внутрисхемного программирования IAP Проект интерфейса обслуживания IAP демонстрирует применение встроен- ного в микроконтроллеры LPC2000 механизма внутрисхемного программиро- вания Flash-памяти средствами пользовательской программы. Используемые в проекте функции обслуживания IAP могут быть внедрены в любое устройство или систему на базе микроконтроллера LPC2000, если необходимо организо- вать самопрограммирование Flash-памяти внутри самого приложения. Интерфейс обслуживания IAP LPC2000 [16] реализован в проекте, все фай- лы которого находятся в каталоге IAP. Основная программа интерфейса IAP на- ходится в файле main.c этого проекта. Программа организует выполнение сле- дующих операций IAP: стирание сектора Flash-памяти, копирование блока данных из SRAM во Flash-память, чтение и индикация содержимого некоторо- го объема Flash-памяти. Операции, связанные с изменением содержимого Flash-памяти, производятся с помощью функции iap_entry(command,result), вы- зываемой с указателем IAP_LOCATION, равным 0x7FFFFFFl. Этот адрес в па- мяти микроконтроллера LPC2000 является точкой входа в подпрограмму IAP Вызов функции IAP iap_entry(command, result) производится с условием предва- рительного определения ее параметров (команд), которые задаются в структуре command[5]. Результаты выполнения функции iap_entry(command, result) возвра- щаются в структуре result[2]. Во время выполнения функции IAP, прерывания в программе запрещаются. Файл main.c программы обслуживания ТАР //----------------------------------------------------------------------- // Основная программа обслуживания IAP //----------------------------------------------------------------------- #include <iolpc2129.h> //подключение стандартных заголовков и определений #include "hardware.hl' //подключение специальных заголовков и определений volatile extern U8 flagn_knO, flagn_knl, flagn_kn2, flagn_kn3; #define IAP_LOCATION 0x7FFFFFFl //точка входа в подпрограмму IAP typedef void (*IAP)(U32 [],U32 []); //определение функции IAP IAP iap_entry; // U32 command[5]; //определение структуры команд IAP U32 result[2]; //определение структуры результатов IAP char Ram_Arrayl[] = "ABCDEFGHIJKL"; //символьная строка 1 для записи во FLASH char Ram_Array2[] = "abcdefghijkl"; //символьная строка 2 для записи во FLASH
33.10. Обслуживание внутрисхемного программирования IAP 527 char *Ram_Pointer; //определение указателя RAM char *Flash_Pointer; //определение указателя FLASH void read_flash(); //объявление функции чтения и индикации содержимого FLASH //функция чтения и индикации содержимого FLASH void read_flash() { U8 i; Flash_Pointer = (char*)OxOOOOAOOO; //установка указателя FLASH for (i = 0; i<12; i++) { lcd_pro_data(*Flash_Pointer, i); //индикация содержимого FLASH Flash_Pointer++; } } I/-------------------------------------------------------------------------- void main(void) { CPUinitO; //инициализация системы __disable_interrupt(); //запрет прерываний INTERRUPTSinit(); //инициализация прерываний TIMEROinitstart(); //инициализация ТО __enable_interrupt(); //разрешение прерываний delay(1000000); //задержка на сброс ЖКИ lcd_init(); //инициализация ЖКИ delay(1000000); // lcd_clear(); //очистка экрана ЖКИ A_LED1_OFF; //погасить светодиоды 1, 2 A_LED2_OFF; lcd_pro_data('I', 0); //индикация "IAP" с адреса 0 ОЗУ ЖКИ lcd_tek_data('А'); lcd_tek_data('Р'); U8 i; //определение переменной индекса //помещение символьной строки 1 в RAM Ram_Pointer = (char*)0x40000100; //установка указателя RAM for (i = 0; i<12; i++) { *Ram_Pointer = Ram_Arrayl[i]; //помещение символьной строки в RAM Ram_Pointer++; } //помещение символьной строки 2 в RAM Ram_Pointer = (char*)0x40000200; //установка указателя RAM for (i = 0; i<12; i++) { *Ram_Pointer •= Ram_Array2[i]; //помещение символьной строки в RAM Ram_Pointer++; } iap_entry = (IAP)IAP_LOCATION; //установка указателя функции IAP whiled) //Начало основного цикла { if (flagn_kn0==l) //нажималась ли кнопка 0 { flagn_kn0=0; //да, сбросить флаг нажатия
528 Глава 33. Пользовательские проекты на базе микроконтроллеров LPC2000 ___disable_interrupt(); //запрет прерываний command[0] = 50; //код команды "подготовить сектор к операции записи" command[1] = 5; //начальный номер сектора Flash command[2] = 5; //конечный номер сектора Flash iap_entry(command,result); //вызов функции IAP command[0] = 52; //код команды "стереть сектор" command[1] = 5; //начальный номер сектора Flash command[2] = 5; //конечный номер сектора Flash command[3] = 58982; //cclk в кГц iap_entry(command,result); //вызов функции IAP command[0] = 50; //код команды "подготовить сектор к операции записи" command[1] = 5; //начальный номер сектора Flash command[2] = 5; //конечный номер сектора Flash iap_entry(command,result); //вызов функции IAP commandfO] = 51; //скопировать 512 байт из RAM с адреса 0x40000100 commandfl] = ОхООООАООО; //во Flash с адреса 0х0000А000 command[2] = 0x40000100; // command[3] =512; // command[4] = 58982; //cclk в кГц iap_entry(command,result); //вызов функции IAP ___enable_interrupt(); //разрешение прерываний lcd_clear(); //очистка экрана ЖКИ read_flash(); //чтение и индикация содержимого FLASH } if (flagn_knl==l) //нажималась ли кнопка 1 { flagn_knl=0; //да, сбросить флаг нажатия ___disable_interrupt(); //запрет прерываний command[0] = 50; //код команды "подготовить сектор к операции записи" command[1] = 5; //начальный номер сектора Flash command[2] = 5; //конечный номер сектора Flash iap_entry(command,result); //вызов функции IAP command[0] = 52; //код команды "стереть сектор" command[1] = 5; //начальный номер сектора Flash command[2] = 5; //конечный номер сектора Flash command[3] = 58982; //cclk в кГц iap_entry(command,result); //вызов функции IAP commandfO] = 50; //код команды "подготовить сектор к операции записи" command[1] = 5; //начальный номер сектора Flash command[2] = 5; //конечный номер сектора Flash iap_entry(command,result); //вызов функции IAP commandfO] = 51; //скопировать 512 байт из RAM с адреса 0x40000200 commandfl] = ОхООООАООО; //во Flash с адреса ОхООООАООО command[2] = 0x4000t)200; // command[3] =512; ' // command[4] = 58982; //cclk в кГц iap_entry(command,result); //вызов функции IAP __enable_interrupt(); //разрешение прерываний lcd_clear(); //очистка экрана ЖКИ read_flash(); //чтение и индикация содержимого FLASH } if (flagn_kn2==l) //нажималась ли кнопка 2
33.10. Обслуживание внутрисхемного программирования IAP 529 { flagn_kn2=0; //да, сбросить флаг нажатия __disable_interrupt(); //запрет прерываний command[0] = 50; //код команды "подготовить сектор к операции записи" command[1] = 5; //начальный номер сектора Flash command[2] = 5; //конечный номер сектора Flash iap_entry(command,result); //вызов функции IAP command[0] = 52; //код команды "стереть сектор" command[l] = 5; //начальный номер сектора Flash command[2] = 5; //конечный номер сектора Flash command[3] = 58982; //cclk в iap_entry(command,result); __enable_interrupt(); lcd_clear(); read_flash(); } if (flagn_kn3==l) { flagn_kn3=0; lcd_clear(); delay(1000000); read_flash(); } } } //------------------------- кГц //вызов функции IAP //разрешение прерываний //очистка экрана ЖКИ //чтение и индикация содержимого FLASH //нажималась ли кнопка 3 //да, сбросить флаг нажатия //очистка экрана ЖКИ //задержка //чтение и индикация содержимого FLASH Программа работает следующим образом. При нажатии на кнопку «0», про- изводится запись во Flash-память символьной строки «ABCDEFGHIJKL». При нажатии на кнопку «1» — запись во Flash-память символьной строки «abcdefghijkl». При нажатии на кнопку «2» — стирание сектора Flash-памяти, в который производилась запись символьных строк. При нажатии на кнопку «3» — чтение области Flash-памяти и вывод на ЖКИ прочитанного содержимого области, в виде символьной строки. Стертые ячейки (байты) Flash-памяти име- ют значение OFFh и индицируются на ЖКИ, как полностью закрашенные зна- коместа (см. Приложение 6). Перед вызовом команды записи или стирания Flash-памяти, в программе всегда вызывается команда подготовки сектора Flash-памяти к операции записи. Все вышеперечисленные операции производятся в программе над сектором №5 Flash-памяти микроконтроллера LPC2129, а копируется в этот сектор блок данных размером 512 байт из SRAM. Список рекомендуемой литературы к Части 2 1. ARM® IAR Embedded Workbench™ IDE. User Guide for Advanced RISC Machines Ltd’s ARM Cores. © Copyright 1999-2005 IAR Systems. 2. Installation and Licensing Guide for the LAR Embedded Workbench™. November 2003, © Cppyright 2003 LAR Systems. 3. ARM® LAR C/C++ Compiler. Reference Guide for Advanced RISC Machines Ltd’s ARM Cores. © Copyright 1999-2005 IAR Systems. 4. IAR Linker and Library Tools. Reference Guide. Version 4.59. © Copyright 1987-2005 IAR Systems. 304
530 Глава 33. Пользовательские проекты на базе микроконтроллеров LPC2000 5. Entering ISP mode from user code. AN10356 Application note. Rev. 02-25 October 2005. 6. LPC-H2129 HEADER BOARD FOR LPC2129 ARM7TDMI-S MICROCONTROLLER. Copyright(c) 2004, OLIMEX Ltd., www.olimex.com/dev. 7. ARM-JTAG Wiggler COMPATIBLE DONGLE FOR PROGRAMMING AND DEBUGGING. Copyright(c) 2004, OLIMEX Ltd., www.olimex.com/dev. 8. Библиотека электронных компонентов. Выпуск 8: Жидкокристаллические индикато- ры фирмы DATA International. — М.: ДОДЭКА, 1999, 64 с. 9. Алфавитно-цифровые индицирующие ЖК-модули на основе контроллера HD44780. © 2000 КТЦ-МК. 10. AN 10331. Philips LPC2000 family phase lock loop. Rev. 01 — 1 November 2004 Application note. Philips Semiconductors. 11. AN 10382. Using the RTC efficiently in the LPC213x. Rev. 01 — 6 June 2005 Application note. Philips Semiconductors. 12. AN10369. UART/SPI/I2C code examples. Rev. 01 — 06 April 2005 Application note. Philips Semiconductors. 13. Microchip 24AA64/24LC64 64K I2C™ CMOS Serial EEPROM. 1999 Microchip Technology Inc. DS21189C. 14. 3V/5V, 1 mW 2-/3-Channel 16-Bit, Sigma-Delta ADCs AD7705/AD7706. Analog Devices. Inc., 1998., www.analog.com. 15. 2.5V/3.0V High Precision Reference AD780. Analog Devices. Inc., 2002., www.analog.com. 16. AN 10256. Philips ARM LPC microcontroller family. Rev. 02 — 25 October 2004 Application note. Philips Semiconductors.
Краткий словарь терминов АНВ (Advanced High-performance Bus) — высокоскоростная системная шина, пред- ставляет собой дальнейшее развитие стандар- та AM В А. АМВА (Advanced Microcontroller Bus Architecture) — разработанный в 1996 г. для ARM-процессоров стандарт системной ши- ны. Burst Mode — пакетный режим передачи данных по шине. CISC архитектура (Complex Instruction Set Computer) — архитектура компьютера с полным набором команд. CS — вход «выбора» микросхемы (как правило, с активным НИЗКИМ уровнем). Если на этот вход подано напряжение ВЫ- СОКОГО уровня, то микросхема находится в отключенном состоянии. GPIO (General Purpose Input-Output) — линия ввода/вывода общего назначения. Handler — программа-обработчик того или иного события. IAP (In Application Programming) — про- граммирование встроенной Flash-памяти внутри пользовательского приложения (внутрипрограммное программирование). ISP (In System Programming) — внутри- системное программирование встроенной Flash-памяти. Master — ведущее устройство, которое управляет процессом обмена через интер- фейс. PLL (Phase Lock Loop) — фазовая авто- подстройка частоты (ФАПЧ). PWM .{Pulse Width Modulation) — ши- ротно-импульсная модуляция (ШИМ). RISC архитектура (Reduced Instruction Set Computer) — архитектура компьютера с сокращенным набором команд. Slave — ведомое устройство, которое участвует в обмене через интерфейс под уп- равлением ведущего устройства. UART (Universal Asynchronous Receiver Transmitter) — интерфейс универсального асинхронного приемопередатчика. VPB (VLSI Peripheral Bus) — шина пери- ферийных устройств. WatchDog Timer — сторожевой таймер. Антипереполнение счетчика — при счете на убывание, антипереполнение означает та- кое состояние счетчика, когда его значение достигло минимума (как правило, 0), и в мо- мент прихода следующего же счетного импульса значение счетчика станет макси- мальным (например, для 8-битного счетчика — равным 255). Банк памяти — определенная область памяти микроконтроллера, управление до- ступом к которой осуществляется через со- ответствующие управляющие регистры. Бод (Baud) — единица скорости обмена с периферийными устройствами, равная 1 бит в секунду. Вектор прерывания — 32-битный указа- тель на адрес первой команды подпрограм- мы-обработчика данного прерывания. Выпадающая команда — в нормальном режиме работы конвейера выполняются ко- манды, следующие в тексте программы и в памяти микроконтроллера непосредственно друг за другом. Это обеспечивает непрерыв- ность и максимально быстрое выполнение операций. Условный или безусловный пере- ход к команде «выпадающей» из этой после- довательности, приводит к нарушению не- прерывности работы конвейера, так как тре- бует дополнительного обращения к памяти микроконтроллера для чтения (а эта опера- ция занимает определенное время). Гйстерезис (от греч. «запаздывание») — разность между порогами срабатывания и отпускания на входе электронной схемы (обычно — триггера или компаратора). На- пример, если срабатывание (переключение) происходит по сигналу ВЫСОКОГО уровня, то возврат в исходное состояние (отпуска-
532 Краткий словарь терминов ние) произойдет только тогда, когда входное напряжение уменьшится на величину гисте- резиса. Это повышает помехоустойчивость электронных схем. Динамические переменные — перемен- ные, значения которых задаются внутри той или иной команды (функции) и не сохраня- ются в памяти после того, как выполнение этой команды завершается. Доминантный бит — в терминологии ин- терфейса CAN, это бит НИЗКОГО логичес- кого уровня. Поскольку сразу несколько уст- ройств могут участвовать в обмене по шине CAN и передавать в нее те или иные данные, то, во избежание ошибок, в любой момент времени доминантный бит «затирает» любое количество недоминантных (рецессивных) битов ВЫСОКОГО уровня. Драйвер — программа, управляющая ра- ботой того или иного узла микроконтролле- ра или периферийного устройства. Дуплексный режим — режим двунаправ- ленного обмена с периферийными устройс- твами, когда прием и передача данных могут осуществляться одновременно. Защелка — триггер или регистр сдвига, предназначенные для временной фиксации (сохранения) тех или иных данных или со- стояний. Исключение — исключительная ситуа- ция — состояние, когда (вследствие вне- шних или внутренних причин) генерируется прерывание микроконтроллера. Квитирование — такой режим обмена с периферийным устройством по последова- тельному или параллельному каналу, когда устройство в ответ на принятое сообщение выдает управляющее сообщение или сигнал подтверждения приема. Коммутируемая резистивная матрица — набор встроенных прецизионных резисторов (R, 2R, 3R... nR), с помощью которых зада- ются взвешенные разрядные коэффициенты в выходном сигнале цифро-аналогового пре- образователя (ЦАП). Компаратор — аппаратная схема сравне- ния уровней сигналов. Меандр — последовательность положи- тельных и отрицательных прямоугольных импульсов одинаковой длительности. Мониторинг — слежение за процессом. Мультиплексирование — метод, когда состояние выхода логической или аппарат- ной схемы определяется состоянием не- скольких входов, «опрос» которых произво- дится циклически в различные моменты вре- мени. Опорное напряжение АЦП — напряже- ние, которое компараторы АЦП используют в качестве эталонного при «оцифровке» входного аналогового сигнала. Подача — загрузка в регистр, управляю- щий работой той или иной периферийной функции микроконтроллера, определенной последовательности данных, с целью иници- ализации соответствующей функции. Подтягивающий резистор — резистор (как правило, номиналом от 0.5 до 10 кОм), который соединяет тот или иной вывод мик- росхемы с линией питания или общей ши- ной. Таким образом, при отсутствии на этом выводе внешнего сигнала, на нем будет при- нудительно установлен, соответственно, ВЫСОКИЙ или НИЗКИЙ уровень напря- жения. Порог отпускания — уровень напряже- ния на входе логической схемы, при дости- жении которого происходит ее переключе- ние в исходное состояние (отпускание). Порог срабатывания — уровень напря- жения на входе логической схемы, при до- стижении которого происходит ее переклю- чение в противоположное состояние (сраба- тывание). Программная среда — программный па- кет, включающий в себя инструменты обра- ботки-отладки пользовательского приложе- ния. Прямой доступ к памяти (Direct Memory Access, DMA) — обращение периферийных устройств непосредственно к памяти микро- контроллера, без участия центрального про- цессора. Ресурс — доступный в пользовательской системе аппаратный или программный мо- дуль. Рецессивный бит — в терминологии ин- терфейса CAN, это бит ВЫСОКОГО логи- ческого уровня. Если на шине присутствует доминантный бит, то переданный в шину од- ним из участников обмена рецессивный бит не будет воспринят другими устройствами- участниками обмена. Симулятор — программа, позволяющая имитировать («симулировать») процесс ра- боты аппаратного узла микроконтроллера, периферийного устройства или всей пользо- вательской системы в целом. Таким образом, пользователь может произвести отладку сис- темы «виртуально», на экране компьютера, а затем внести необходимые реальные измене- ния на аппаратном уровне. Событие — любое действие или измене- ние состояние системы, приводящее к вы- полнению тех или иных действий.
Краткий словарь терминов 533 Спад — отрицательный перепад входно- го сигнала из ВЫСОКОГО (1) уровня в НИЗКИЙ (0) уровень. По умолчанию, счи- тается, что сигнал имеет положительную по- лярность. Если это не так (специально ого- ворено, что сигнал имеет отрицательную по- лярность), то спадом будет перепад из 0 в 1. Статические переменные — переменные, значения которых сохраняются в памяти в течение всего времени работы программы. Толерантность — толерантность к на- пряжению означает, что на данный вывод или линию микроконтроллера допускается подача соответствующего входного напря- жения. Трассировка — пошаговое выполнение команд с записью результатов в специальном файле. Цриггер Шмита — пороговый элемент (триггер) с гистерезисом, используется в ка- честве аппаратного фильтра с целью умень- шения «дребезга» при переключении кон- тактов (например, кнопки). Условие на шине (линии) — определен- ная последовательность сигналов или дан- ных, которую генерирует одно из устройств, участвующих в обмене по шине. Обнаружив на шине (в линии связи) такую условную последовательность, остальные устройства реагируют на это, выполняя те или иные операции. ФАПЧ — фазовая автоподстройка час- тоты (PLL — Phase Lock Loop). Фрейм (кадр) — при обмене с перифе- рийным устройством по последовательному каналу — порция данных, передаваемых или принимаемых по сетевой шине (линии). По- мимо собственно байтов данных, содержит стартовые, стоповые, идентификационные, управляющие и др. служебные биты. Фронт — положительный перепад вход- ного сигнала из НИЗКОГО (0) уровня в ВЫ- СОКИЙ (1) уровень. По умолчанию, счита- ется, что сигнал имеет положительную по- лярность. Если это не так (специально оговорено, что сигнал имеет отрицательную полярность), то фронтом будет перепад из 1 в 0. Функция вывода — назначение выводу («ножке») микроконтроллера той или иной функции (например, порта ввода/вывода, входа внешнего прерывания и т. д.). С целью уменьшения количества выводов микрокон- троллера, каждый из них может использо- ваться для выполнения нескольких задач (но не одновременно, а в соответствии с функ- цией, выбранной в текущий момент време- ни для данного вывода). Хост — ЭВМ пользователя, управляю- щая работой микроконтроллера в пользова- тельской системе. ШИМ — широтно-импульсная модуля- ция (PWM).
Приложение 1. ПРЕДЕЛЬНО ДОПУСТИМЫЕ ПАРАМЕТРЫ МИКРОКОНТРОЛЛЕРОВ LPC2000 В соответствии с Системой абсолютных максимальных оценок (IEC 60134) на эти значения накладываются следующие ограничения: 1. Изделие содержит схему, предназначенную для защиты внутренних цепей от воздействия статического электричества. Тем не менее, следует принимать меры предосторожности, чтобы избегать приложения к выводам микроконт- роллера напряжений, превышающих максимально допустимые. 2. Параметры действительны для рабочего температурного диапазона, если не указан иной диапазон. Все напряжения даны относительно Kss, если не ука- зано иное. Параметр Символ Условия Min Мах н !! Напряжение питания ядра (1.8 В)0 K)D(1V8) -0.5 +2.5 В Напряжение питания периферии (3.3 В)2* ^DD(3V3) -0.5 +3.6 В Напряжение питания анало- говой периферии (3.3 В)3) ^DDA -0.5 4.6 В Входное напряжение на линии ИВАТ ^ВАТ Напряжение питания модуля RTC -0.5 4.6 В Входное напряжение на линии KREF ^REF Опорное напряжение АЦП -0.5 4.6 В Аналоговое внешнее напря- жение на входах АЦП4* На -0.5 5.1 В Входное напряжение на линиях I/O, толерантных к напряжению 5 В5**6* И -0.5 6.0 В Входное напряжение на прочих линиях I/O5* И -0.5 K)D(3V3) + 0-57* в Постоянный ток в цепи питающего напряжения8* — 100” мА Постоянный ток в цепи общего провода10* 4s — 100” мА
Приложение 1. Предельно допустимые параметры микроконтроллеров LPC2000 535 (продолжение) Параметр Символ Условия Min Мах Единица измерения Температура хранения11) ^stg -65 + 150 °C -40 + 125 °C Мощность рассеивания корпуса Ptot(pack) Определяется конс- трукцией корпуса и не зависит от потребляе- мой мощности микро- контроллера — 1.5 Вт Шина ядра и внутренняя шина. 2) Внешняя шина. 3) Напряжение 3.3 В. 4) Выводы, связанные с АЦП. 5) Включая напряжение на выходах в 3-м состоянии. 6) Допустимо только в случае, если присутствует напряжение KDD. 7) Не должно превышать 4.6 В. 8) В линии питания микроконтроллера. 9) Пиковое значение тока ограничено 25-кратным значением максимального среднего тока. |0) Линия «земли». 1За висит от типа корпуса.
Приложение 2. СТАТИЧЕСКИЕ ХАРАКТЕРИСТИКИ МИКРОКОНТРОЛЛЕРОВ LPC2000 Статические характеристики LPC2101/02/03 В диапазоне рабочих температур Та = -4О...+85°С для коммерческих прило- жений (если не указано иное). Параметр Символ Условия Min Tip1’ Мах Единица измерения Напряжение питания (1.8 В)2) ^DD(1V8) 1.65 1.8 1.95 В Напряжение питания перифе- рии (3.3 Вр ^DD(3V3) 3.0 3.3 3.6 В Напряжение питание аналого- вой периферии ^DDA 3.3 В 3.0 3.3 3.6 В Напряжение пита- ния модуля RTC ГвАТ 2.04’ 3.3 3.6 В Опорное напряже- ние АЦП ^REF 3.0 3.3 ^DDA В Стандартные линии портов, RESET, RTCK Входной ток НИЗКОГО уровня Al V\ = 0 В, подтягивающий к «плюсу» питания резистор от- сутствует — — 3 мкА Входной ток ВЫСОКОГО уровня Ан Ki = rDD(3V3), подтягивающий к общему проводу резистор от- сутствует — — 3 мкА Выходной ток 3-го (высокоимпе- дансного) состояния 4)Z И0=ОВ, Ко= rDD(3V3), подтягивающий к «плюсу» питания/общему про- воду резистор отсутствует — — 3 мкА Втекающий ток I/O Aatch —(0-5 rDD(3V3)) < К< (1.5 rDD(3V3)) < 125°С — — 100 мА Входное напряжение V\ Линия сконфигурирована для цифровой функции* 05),6),7) — 5.5 В Выходное напряжение K> Выход активен 0 — ^DD(3V3) В Входное напряже- ние ВЫСОКОГО уровня K)H 2.0 — — В Входное напряже- ние НИЗКОГО уровня Hl — — 0.8 В
Статические характеристики LPC2101/02/03 537 (продолжение) Параметр Символ Условия Min Tip4 Max Единица измерения Напряжение гистерезиса Hhys — 0.4 — В Выходное напряже- ние ВЫСОКОГО уровня8) К)Н Zoh = —4 мА H)D(3V3) “О-4 — — В Выходное напря- жение НИЗКОГО уровня8) K>L Zol = —4 mA — — 0.4 В Выходной ток ВЫСОКОГО уровня8) /он Ион = ^dd(3V3) -0.4 В 4 — — мА Выходной ток НИЗКОГО уровня8) Iql Kol=0.4B 4 — — мА Выходной ток ВЫСОКОГО уровня короткого замыкания9) ZoHS rOH = 0B — — -45 мА Выходной ток НИЗКОГО уровня короткого замыкания9) ZoLS K)L = ^DDA — — 50 мА Подтягивающий к общему проводу ток Zpd K| = 5BIO) 10 50 150 мкА Подтягивающий к «плюсу» питания ток11) Zpu Hj = OB -15 -50 -85 мкА Kdd(3V3) < И < 5 Bl0> 0 0 0 мкА Ток потребления в нормальном (активном) режиме ^DD ^DD(3V3) = 3.3 B, Ta=25°C, код while(l){} выполняется в FLASH, периферия не активна, CCLK = 10 МГц TBD TBD TBD мА CCLK = 70 МГц (прочие параметры см. выше) TBD TBD TBD мА Ток потребления в режиме Power-down ^DD ^DD(1V8) = L8 В, Га = +25°С TBD TBD TBD мкА ^DD(1V8) = 1.8 В, Та=+85°С TBD TBD TBD мкА Ток потребления от батареи ИВАТ . в режиме Power-down12) ЛзАТ Частота (на выводе RTXC) RTC = 32 кГц, Га = +25°С, ^DD(1V8) = L8 В, ИвАт = 2.5 В — 7 TBD мкА ^DD(IVS) = 1-8 В, ГВАТ = 3.0В — TBD TBD мкА
538 Приложение 2. Статические характеристики микроконтроллеров LPC2000 (продолжение) Параметр Символ Условия Min Tip1’ Max Единица измерения Ток потребления от батареи ИВАТ в нормальном (активном) режиме12* 4аТ CCLK = 70 МГц, PCLK =17.5 МГц, PCLK разрешает RTCK, частота RTC = 32 кГц (на выводе RTXC), Та = +25°С K)D(1V8) = 1.8 В, УВАТ = 3.0 В TBD TBD TBD мкА Линии шины 12С Входное напряже- ние ВЫСОКОГО уровня Ин 0-7И)О(зуз) — — В Входное напряже- ние НИЗКОГО уровня Hl — — 0-3Fdd(3V3) В Напряжение гис- терезиса Hiys — 0-5 LDd(3V3) — В Выходное напря- жение НИЗКОГО уровня8) Hol 4ls — 3 мА — — 0.4 В Входной ток утечки13) 4i И = H)D(3V3) — 2 4 мкА и = 5 В — 10 22 мкА Выводы генератора Входное напря- жение XTAL1 HcTALl 0 — 1.8 В Выходное напря- жение XTAL2 H<TAL2 0 — 1.8 В Входное напря- жение RTXC1 И<ТХС1 0 — 1.8 В Выходное напря- жение RTXC2 ПсГХС2 0 — 1.8 В ’) Типовые значения не гарантируются. Указанные значения приведены для комнатной тем- пературы (+25°С) и номинального напряжения питания. 2) Шина ядра и внутренняя шина. 3) Внешняя шина. 4) В типичном случае, модуль RTC перестает функционировать, когда напряжение его пита- ния ИВАТ становится ниже 1.6 В. 5) Включая напряжение на выходах в 3-м состоянии. 6) Питающее напряжение Kdd(3V3) должно присутствовать. 7) Выводы с 3-м состоянием переходят в 3-е состояние, когда напряжение И)О(зуз) пропадает. 8) На всех линиях питания присутствуют шумы со амплитудой до 100 мВ. 9) Только заданный короткий период времени. 10) Минимальное значение для V\ = 4.5 В, максимальное значение для V\ = 5.5 В. ’^Относится к Р 1.25:16. 12) На линии ИВАТ. 13) Относительно Kss.
Статические характеристики LPC2104/05/06 539 Статические характеристики LPC2104/05/06 В диапазоне рабочих температур 7^ = -4О...+85°С для коммерческих прило- жений (если не указано иное). Параметр Символ Условия Min Tip” Max Единица измерения Напряжение питания (1.8 В) K)D(1V8) 1.65 1.8 1.95 В Напряжение питания периферии (3.3 В) ^DD(3V3) 3.0 3.3 3.6 В Стандартные линии портов, RST, RTCK и DBGSEL Входной ток НИЗКОГО уровня Ab И] — 0 В, подтягивающий к «плюсу» питания резистор отсутствует — — 3 мкА Входной ток ВЫСОКОГО уровня 71H Kj = KDD(3V3)> подтягивающий к общему проводу резистор отсутствует — — 3 мкА Выходной ток 3-го (высокоимпедансно- го) состояния loz и0=ов, Ро= ^dd(3V3)» подтягивающий к «плюсу» питания/общему проводу резистор отсутствует — — 3 мкА Втекающий ток I/O •Aatch —(0.5Kdd(3V3)) < И< (1.5ИСО(зуз)) Tj < 125°С — — 100 мА Входное напряжение Vl Линия сконфигурирована для цифровой функции Ц3),4),5) — 5.5 В Выходное напряжение Ио Выход активен 0 — ^DD(3V3) В Входное напряже- ние ВЫСОКОГО уровня ^IH 2.0 — — В Входное напряже- ние НИЗКОГО уровня Иц. — — 0.8 В Напряжение гистерезиса ^hys — 0.4 — В Выходное напряже- ние ВЫСОКОГО уровня6) ^OH /он ~ — 4 мА Jdd(3V3) “О-4 — — В Выходное напряже- ние НИЗКОГО уровня6* Hol Iql = —4 мА — — 0.4 В Выходной ток ВЫСОКОГО уровня6* Лзн К)Н = ^DD(3V3) ~0-4 В —4 — — мА Выходной ток НИЗКОГО уровня6’ ZoL Kol = 0.4B 4 — — мА Выходной ток ВЫСОКОГО уровня короткого замыкания7* 4)HS Ион = 0В — — -45 мА
540 Приложение 2. Статические характеристики микроконтроллеров LPC2000 (продолжение) Параметр Символ Условия Min Tip1* Max ii 11 Выходной ток НИЗКОГО уровня короткого замыкания7) 4)LS J'OL = PdD(3V3) — — 50 mA Подтягивающий к общему проводу ток (относится к DBGSEL) ^pd Vi = 5 B8> 20 50 100 мкА Подтягивающий к «плюсу» питания ток (относится Р0.22...Р0.31) ^pu Pj = OB -25 -50 -65 мкА H)D(3V3) < Pi < 5 B8) 0 0 0 мкА Ток потребления в активном режиме ^DD Pdd(ivs) = 1.8 B, Ta = 25°C, код while) 1){} выполняется в FLASH, пери- ферия не активна, CCLK = 60 МГц 30 — mA Ток потребления в режиме Power-down ^DD Pdd(iv8)=1.8B, Ta = +25°C — 10 — мкА Kdd(1V8)=1.8B, Ta = +85’C — 50 500 мкА Линии шины I2C Входное напряже- ние ВЫСОКОГО уровня PlH rT0L= 4.5...5.5 В 0.7Ktol — — В Входное напряжение НИЗКОГО уровня KIL Ltol = 4.5...5.5 В — — o.3rTOL В Напряжение гистерезиса Hhys rT0L = 4.5...5.5 В — 0.5rTOL — В Выходное напряже- ние ВЫСОКОГО уровня6) Kol Zols = 3 mA — — 0.4 В Входной ток утечки 4i Pi= Pdd(3V3) — 2 4 мкА Vx = 5 В — 10 22 мкА Выводы генератора Входное напряже- ние XTAL1 PxTALl 0 — PdD(1V8) В Выходное напряже- ние XTAL2 PxTAL2 0 — PdD(1V8) В ’) Типовые значения не гарантируются. Указанные значения приведены для комнатной тем- пературы (+25°С) и номинального напряжения питания. 2) Емкость вывода определена, но не протестирована. 3) Включая напряжение на выходах в 3-м состоянии. 4) Питающее напряжение Pdd(3V3) должно присутствовать. 5) Выводы с 3-м состоянием переходят в 3-е состояние, когда напряжение Kdd(3V3) пропадает. 6) На всех линиях питания присутствуют шумы со амплитудой до 100 мВ. 7) Только заданный короткий период времени. 8) Минимальное значение для Vx = 4.5 В, максимальное значение для Vx = 5.5 В.
Статические характеристики LPC2119/29/14/24 и LPC2212/14/92/94 541 Статические характеристики LPC2119/29/14/24 и LPC2212/14/92/94 Для коммерческих приложений в диапазоне рабочих температур Т.л = -4О...+85°С (для LPC2292/94 Тя = -4О...+125°С). Параметр Символ Условия Min Tip” Max Единица измерения Напряжение пита- ния (1.8 В) ^DD(1V8) 1.65 1.8 1.95 В Напряжение пита- ния периферии (3.3 В) ^DD(3V3) 3.0 3.3 3.6 В Напряжение пита- ния аналоговой периферии (3.3 В) f'DDA 2.5 3.3 3.6 В Стандартные линии портов, RES] ЕТ, RTCK Входной ток НИЗКОГО уровня Ль Vi = 0 В, подтягивающий к «плюсу» питания резистор отсутствует — — 3 мкА Входной ток ВЫСОКОГО уровня Лн И = ^dd(3V3)> подтягивающий к общему проводу резистор отсутствует — — 3 мкА Выходной ток 3-го (высокоимпеданс- ного) состояния 1&L и0=ов, Ио= Госцзуз), подтягивающий к «плюсу» питания/общему проводу резистор отсутствует — — 3 мкА Втекающий ток I/O ^latch -(0.5 KDD(3V3)) < И< (1.5 KDD(3V3)) Tj < 125°С — — 100 мА Входное напряжение К, Линия сконфигурирована для цифровой функции q3),4),5) — 5.5 В Выходное напряжение Ко Выход активен 0 — ^DD(3V3) В Входное напряже- ние ВЫСОКОГО уровня 2.0 — — В Входное напряже- ние НИЗКОГО уровня Hl — — 0.8 В Напряжение гисте- резиса Hhys — 0.4 — В Выходное напряже- ние ВЫСОКОГО уровня6* K)H Лэн = —4 мА H)D(3V3) “О-4 — — В Выходное, йапряже- ние НИЗКОГО _ уровня6* K>L Лэь ~ —4 мА — — 0.4 В Выходной ток ВЫСОКОГО уровня6* Лэн КэН = ^DD(3V3) -°-4 В —4 — — мА Выходной ток НИЗКОГО уровня6* Л)Ь ИО1=0.4В 4 — — мА Выходной ток ВЫСОКОГО уровня короткого замыкания7* Л)Н5 Гон = 0В — — -45 мА
542 Приложение 2. Статические характеристики микроконтроллеров LPC2000 (продолжение) Параметр Символ Условия Min Tip1* Max Единица измерения Выходной ток НИЗКОГО уровня короткого замыкания7) AdLS K)L ~ ^DD(3V3) — — 50 мА Подтягивающий к общему проводу ток (относится к DBGSEL) Apd Vt = 5 B8> 10 50 150 мкА Подтягивающий к «плюсу» питания ток (относится Р0.22-Р0.31) Apu Kj = OB -15 -50 -85 мкА >dd(3V3)<H<5B8> 0 0 0 мкА Ток потребления в активном режиме Add ^DD(iv8) = 1-8 B, 7a = 25°C, код while(l){} выполняется в FLASH, пери- ферия не активна, CCLK = 60 МГц 60 (50 для LPC2292/94) мА Ток потребления в режиме Power- down Add H>D(iv8)= 1-8 В, Га=+25°С — 10 — мкА K)D(iv8)= 1-8 В, Ta = +85 °C — 110 500 мкА ^dd(1V8) = 1*8 B, Ta = +125°C (для LPC2292/94) — 300 1000 мкА Линии шины I2C Входное напряже- ние ВЫСОКОГО уровня Ин FTOl = 4.5...5.5 В 0.7Ktol — — В Входное напряже- ние НИЗКОГО уровня Hl KTol=4.5...5.5B — — o.3rTOL В Напряжение гисте- резиса HyS Ktol = 4.5...5.5B — 0.5rTOL — В Выходное напряже- ние НИЗКОГО уровня6) K>L Zols = 3 mA — — 0.4 В Входной ток утечки 4i = ^DD(3V3) — 2 4 мкА Kj = 5B — 10 22 мкА Выводы генератора Входное напряже- ние XTAL1 ^XTALl 0 — ^DD(1V8) В Выходное напряже- ние XTAL2 ^XTAL2 0 — ^DD(1V8) В ’) Типовые значения не гарантируются. Указанные значения приведены для комнатной тем- пературы (+25°С) и номинального напряжения питания. 2) Емкость вывода определена, но не протестирована. 3) Включая напряжение на выходах в 3-м состоянии. х 4) Питающее напряжение KDD(3v3) должно присутствовать. 5) Выводы с 3-м состоянием переходят в 3-е состояние, когда напряжение KDD(3V3) пропадает. 6) На всех линиях питания присутствуют шумы со амплитудой до 100 мВ. 7) Только заданный короткий период времени. 8) Минимальное значение для Ц = 4.5 В, максимальное значение для V\ = 5.5 В.
Статические характеристики LPC2210/20/90 543 Статические характеристики LPC2210/20/90 В диапазоне рабочих температур Та = -4О...+85°С для коммерческих прило- жений (если не указано иное). Параметр Символ Условия Min Tip1’ Max Единица измерения Напряжение питания (1.8 В) K)D(1V8) 1.65 1.8 1.95 В Напряжение питания периферии (3.3 В) ^DD(3V3) 3.0 3.3 3.6 В Напряжение пита- ния аналоговой периферии (3.3 В) ^DDA 2.5 3.3 3.6 В Стандартные линии портов, RESET, RTCK Входной ток НИЗКОГО уровня ^IL V\ = 0 В, подтягивающий к «плю- су» питания резистор отсутствует — — 3 мкА Входной ток ВЫСОКОГО уровня Лн Kj = ИО[)(зуз), подтягивающий к общему проводу резистор от- сутствует — — 3 мкА Выходной ток 3-го (высокоимпеданс- ного) состояния 4)Z И0=ОВ, Ио= K)D(3V3)> подтягивающий к «плюсу» питания/общему про- воду резистор отсутствует — — 3 мкА Втекающий ток I/O Aatch —(0.5 ГЬо(зуз)) < И< (1.5 KDD(3V3)) 7] < 125°С — — 100 мА Входное напряжение K| Линия сконфигурирована для цифровой функции 02),3),4) — 5.5 В Выходное напряжение K> Выход активен 0 — H)D(3V3) В Входное напряжение ВЫСОКОГО уровня И1Н 2.0 — — В Входное напряжение НИЗКОГО уровня K1L — — 0.8 В Напряжение гистерезиса Khys — 0.4 — В Выходное напряже- ние ВЫСОКОГО уровня5) Аэн = — 4 мА H)D(3V3) “О-4 — — В Выходное напряже- ние НИЗКОГО уровня5) K0L 4>l= -4 мА — — 0.4 В Выходной ток ВЫСОКОГО уровня5) Zoh K)H = ^DD(3V3) — 0.4 В —4 — — мА Выходной ток НИЗКОГО уровня5’ ZoL Kol=0.4B 4 — — мА Выходной ток ВЫСОКОГО уровня короткого замыкания6) Zohs Гон = 0В — — -45 мА Выходной ток НИЗКОГО уровня короткого замыкания6) AdLS K)L = ^DD(3V3) — — 50 мА
544 Приложение 2. Статические характеристики микроконтроллеров LPC2000 (продолжение) Параметр Символ Условия Min Tip1* Max Единица измерения Подтягивающий к об- щему проводу ток (от- носится к DBGSEL) ^pd r, = 5 B7) 10 50 150 мкА Подтягивающий к «плюсу» питания ток (относится Р0.22...Р0.31) И = ов -15 -50 -85 мкА H)D(3V3) < И < 5 B7) 0 0 0 мкА Ток потребления в активном режиме ^DD H)D(iv8) = 1.8 B, 7^ = 25°C, код while(l){} выполняется в FLASH, перифе- рия не активна, CCLK = 60 МГц (LPC2210/90) 50 70 (кроме LPC2290) мА CCLK = 75 МГц (LPC2220) 50 70 мА Ток потребления в режиме Power- down ^DD H)D(iv8)= 1-8 В, 7^=+25°С — 10 — мкА H)D(iV8) = 1-8 В, Та = +85°С — 110 500 мкА Hdd(iv8)=1-8 В, Та = +105’С (для LPC2290) — 200 500 мкА Подтягивающий к общему проводу резистор на задаю- щих системную конфигурацию линиях BOOT 1:0 ^PDB Загрузочные линии шины дан- ных D26 и/или D27 — 10 — кОм Линии шины данных D26 и/или D27 с загрузкой внешней памяти и/или линии ввода/вывода отоб- раженной памяти с дополни- тельной утечкой /ikgt — — 0.7 В/ (70 мкА 4" Akgt) Ом Линии шины I2C Входное напряжение ВЫСОКОГО уровня Ин KTOL=4.5...5.5B 0.7Htol — — В Входное напряжение НИЗКОГО уровня HIL KTol=4.5...5.5B — — 0.3HTOL В Напряжение гисте- резиса Hiys rTOL = 4.5...5.5B — 0.5KTOI_ — В Выходное напряже- ние НИЗКОГО уровня5) Hol Adls = 3 — — 0.4 В Входной ток утечки 4i = H)D(3V3) — 2 4 мкА ^ = 5 В — 10 22 мкА Выводы генератора Входное напряжение XTAL1 HcTALl 0 — H)D(1V8) В Выходное напряже- ние XTAL2 H*CTAL2 0 — H)D(1V8) В ’) Типовые значения не гарантируются. Указанные значения приведены для комнатной тем- пературы (+25°С) и номинального напряжения питания. 2) Включая напряжение на выходах в 3-м состоянии. 3) Питающее напряжение rDD(3V3) должно присутствовать. 4) Выводы с 3-м состоянием переходят в 3-е состояние, когда напряжение KDD(3V3) пропадает. 5) На всех линиях питания присутствуют шумы со амплитудой до 100 мВ. 6) Только заданный короткий период времени. 7) Минимальное значение для Pj = 4.5 В, максимальное значение для Tj = 5.5 В.
Статические характеристики LPC2131/32/34/36/38 545 Статические характеристики LPC2131 /32/34/36/38 В диапазоне рабочих температур Тл — -4О...+85°С для коммерческих прило- жений (если не указано иное). Параметр Символ Условия Min Tip1* Max Единица измерения Напряжение питания ядра и периферии (3.3 В) H)D(3V3) 3.0 3.3 3.6 В Напряжение питания аналоговой периферии И)РА 2.5 3.3 3.6 В Напряжение питания модуля RTC ^ВАТ 2.02* 3.3 3.6 В Опорное напряжение АЦП f'REF 3.0 3.3 3.6 в Стандартные линии портов, RESET, RTCK Входной ток НИЗКОГО уровня I\L И = 0 В, подтягивающий к «плюсу» питания резистор отсутствует — — 3 мкА Входной ток ВЫСОКОГО уровня Лн И = *DD(3V3)> подтягиваю- щий к общему проводу ре- зистор отсутствует — — 3 мкА Выходной ток 3-го (высокоимпедансно- го) состояния Zoz И0=ов, К>= H)D(3V3)> подтягиваю- щий к «плюсу» питания/ общему проводу резистор отсутствует — — 3 мкА Втекающий ток I/O Zatch -(0.5 rDD(3V3)) < V< (1.5 KDD(3V3)) 7] < 125°С — — 100 мА Входное напряжение И, Линия сконфигурирована для цифровой функции 03),4),5) — 5.5 В Выходное напряжение Ио Выход активен 0 — H)D(3V3) В Входное напряжение ВЫСОКОГО уровня Ин 2.0 . — — В Входное напряжение НИЗКОГО уровня Ин. — — 0.8 В Напряжение гистерезиса Hiys — 0.4 — В Выходное напряжение ВЫСОКОГО уровня6* И)Н /он = мА H)D(3V3) “0-4 — — В Выходное напряжение НИЗКОГО уровня6* Hol /ql = —4 мА — — 0.4 В Выходной ток ВЫСОКОГО уровня6* Лэн К)Н ~ H)D(3V3) ~0.4 В —4 — — мА Выходной ток НИЗКОГО уровня6* /OL HOL = 0.4 В 4 — — мА 304
546 Приложение 2. Статические характеристики микроконтроллеров LPC2000 (продолжение) Параметр Символ Условия Min Tip1* Max Единица измерения Выходной ток ВЫСОКОГО уровня короткого замыкания7) A)HS KOH = 0B — — -45 мА Выходной ток НИЗКОГО уровня ко- роткого замыкания7) Ajls Vol = ^dda — — 50 мА Подтягивающий к общему проводу ток ^pd И| = 5В8) 10 50 150 мкА Подтягивающий к «плюсу» питания ток (относится к Р1.16...Р1.25) И| = 0В -15 -50 -85 мкА Pdd(3V3) < И < 5 B8) 0 0 0 мкА Ток потребления в активном режиме Лэо ^DD(3V3) = 3-3 Ta = 25°C, код while(l){} выполняется в FLASH, периферия не активна, CCLK = 10 МГц 10 мА CCLK = 60 МГц (прочие параметры см. выше) — 40 — мА Ток потребления в режиме Power-down ЛэО H)D(3V3) = 3-3 В, Та=+25°С — 60 — мкА ^DD(3V3) = 3.3 В, Та = +85°с TBD 500 мкА Ток потребления от батареи ИВАТ в режиме Power-down ^BAT Частота RTC = 32 кГц, (на выводе RTXC), Та = +25°С, ^DD(3V3) = 3.0 В, Иват = 2.5 В — 14 — мкА HdD(3V3) = 3-0 В, ИВАТ =3.0 В — 16 — мкА H>D(3V3) = 3-3 В, Иват = 3.3 В — 18 — мкА H>D(3V3) = 3.6 В, Иват = 3.6 В — 20 — мкА Ток потребления от батареи ИВАт в активном режиме ^BAT CCLK = 60 МГц, PCLK«= 15 МГц, PCLK разрешает RTCK, частота RTC = 32 кГц (на выводе RTXC), Та = +25°С Hdd(3V3) = 3.0 В, Иват = 3.0 В 78 мкА Hdd(3V3) = 3.3 В, Иват = 3.3 В — 80 — мкА Hdd(3V3) = 3.6 В, Иват = 3.6 В — 82 — мкА
Статические характеристики LPC2131/32/34/36/38 547 (продолжение) Параметр Символ Условия Min Tip1’ Max Единица измерения Ток потребления от ба- тареи ИВАТ в активном режиме, оптимизиро- ванный для снижения нагрузки на батарею 4ат PCLK запрещает RTCK в регистре PCONP, частота RTC = 32 кГц (на выводе RTXC), Ta = +25°C, Kbat=3.3B, CCLK = 6 МГц 21 мкА CCLK = 25 МГц — 23 — мкА CCLK = 50 МГц — 27 — мкА CCLK = 60 МГц — 30 — мкА Линии шины 12С Входное напряжение /ВЫСОКОГО уровня^ 1 И(Н 1KT0L = 4.5...5.5 В 1 0.7ИТОЬ — Н Входное напряжение НИЗКОГО уровня” H1L rT0L = 4.5...5.5 В — — 0.3KTOL в Напряжение гистере- зиса H,ys KT0L = 4.5...5.5 В — 0.5rTOL — в Выходное напряжение НИЗКОГО уровня6’ ^OL 4>ls ~ 3 mA — — 0.4 в Входной ток утечки 4i = H)D(3V3) — 2 4 мкА ^ = 5 В — 10 22 мкА Выводы генератора Входное напряжение XTAL1 ^XTALl 0 — 1.8 В Выходное напряжение XTAL2 ^XTAL2 0 — 1.8 В Входное напряжение RTXC1 ^RTXCl 0 — 1.8 В Выходное напряжение RTXC2 ^RTXC2 0 — 1.8 В ^Типовые значения не гарантируются. Указанные значения приведены для комнатной тем- пературы (+25°С) и номинального напряжения питания. 2) Типично модуль RTC перестает функционировать, когда напряжение его питания ИВАТ ста- новится ниже 1.6 В. 3) Включая напряжение на выходах в 3-м состоянии. 4) Питающее напряжение KDD(3V3) должно присутствовать. 5) Выводы с 3-м состоянием переходят в 3-е состояние, когда напряжение KDD(3V3) пропадает. 6) На всех линиях питания присутствуют шумы со амплитудой до 100 мВ. 7) Только заданный короткий период времени. 8) Минимальное значение для Pj = 4.5 В, максимальное значение для = 5.5 В. 9) В соответствии со спецификацией шины 12С, входное напряжение на линиях шины, мень- шее 1.5 В, будет распознаваться как напряжение НИЗКОГО логического уровня, а входное напря- жение, больше 3.0 В, будет распознаваться как напряжение ВЫСОКОГО логического уровня.
548 Приложение 2. Статические характеристики микроконтроллеров LPC2000 Статические характеристики LPC2141 /42/44/46/48 В диапазоне рабочих температур Га = -4О...+85°С для коммерческих прило- жений (если не указано иное). Параметр Символ Условия Min Tip1’ Max Единица измерения Напряжение питания ядра21 ^DD 3.0 3.3 3.6 В Напряжение питания аналоговой периферии H)DA 3.3 В 3.0 3.3 3.6 В Напряжение питания батареи ИзАТ Для модуля RTC 2.03) 3.3 3.6 В Опорное напряжение АЦП f'REF 2.5 3.3 Hdda в Стандартные линии портов, RESET, RTCK Входной ток НИЗКОГО уровня I\L V\ = 0 В, подтягивающий к «плюсу» питания резистор отсутствует — — 3 мкА Входной ток ВЫСОКОГО уровня Лн И = H)D(3V3), подтягивающий к общему проводу резистор отсутствует — — 3 мкА Выходной ток 3-го (высокоимпедансно- го) состояния Zoz Го=0В, Vo= KDD(3V3), подтягивающий к «плюсу» питания/общему проводу резистор отсутствует — — 3 мкА Втекающий ток I/O Aatch -(0.5 KDD(3V3)) < К< (1.5 KDD(3v3)) 7] < 125°С 100 мА Входное напряжение И, Линия сконфигурирована для цифровой функции4)’5)’6) 0 — 5.5 В Выходное напряжение Ио Выход активен 0 — Hdd В Входное напряжение ВЫСОКОГО уровня Ин 2.0 — — В Входное напряжение НИЗКОГО уровня Hl — — 0.8 В Напряжение гистерезиса И,У5 — 0.4 — В Выходное напряже- ние ВЫСОКОГО уровня7) К)Н /он = —4 мА KDD -0.4 — — В Выходное напряже- ние НИЗКОГО уровня7) Hol /ql = —4 мА — — 0.4 В Выходной ток ВЫСОКОГО уровня7) Л)Н Ион = HDD -0.4 В —4 — — мА
Статические характеристики LPC2141/42/44/46/48 549 (продолжение) Параметр Символ Условия Min Tip0 Max Единица измерения Выходной ток НИЗКОГО уровня7) lot Kol = 0.4B 4 — — мА Выходной ток ВЫСОКОГО уровня короткого замыкания8) 4)HS Ион = 0В — — -45 мА Выходной ток НИЗКОГО уровня короткого замыкания8) 4)LS Vol = ^dda — — 50 мА Подтягивающий к общему проводу ток 4d И, = 5В9) 10 50 150 мкА Подтягивающий к «плюсу» питания ток1 °) ^pu K! = 0B -15 -50 -85 мкА HDD< И, < 5 B9) 0 0 0 мкА Ток потребления в активном режиме KDD = 3.3B, Ta = 25°C, код while( ]){} выполняется в FLASH, периферия не активна, CCLK = 10 МГц TBD TBD TBD мА CCLK = 60 МГц (остальные параметры см. выше) TBD TBD TBD мА Ток потребления в режиме Power-down ^DD KDD = 3.3B, Тй = +25°С TBD TBD TBD мкА KDD = 3.3B, Ta = +85°С TBD TBD TBD мкА Ток потребления от батареи ИВАТ в режиме Power-down AbaT Частота RTC = 32 кГц, (на выводе RTXC), Га = +25°С, rDD = 3.0B, Иват = 2.5 В TBD TBD TBD мкА KDD = 3.0B, Иват = 3.0 В TBD TBD TBD мкА Ток потребления от батареи' ИВАТ - в активном режиме AjaT CCLK = 60 МГц, PCLK = 15 МГц, PCLK разрешает RTCK, частота RTC = 32 кГц (на выводе RTXC), Та=+25°С KDD = 3.0B, Иват = 3.0 В TBD TBD TBD мкА
550 Приложение 2. Статические характеристики микроконтроллеров LPC2000 (продолжение) Параметр Символ Условия Min Tipl> Max ii J! Ток потребления от батареи ГВАТ в ак- тивном режиме, опти- мизированный для снижения нагрузки на батарею1 Дат PCLK запрещает RTC К врегистре PCONP, частота RTC = 32 кГц (на выводе RTXC), Ta = +25°C, Иват = 3.3 В, CCLK = 10 МГц TBD TBD TBD мкА CCLK = 60 МГц TBD TBD TBD мкА Линии шины 12С Входное напряжение ВЫСОКОГО уровня Ин O-7HDD(3v3) — — В Входное напряжение НИЗКОГО уровня Hl — — 0-3KDD(3V3) В Напряжение гистерезиса HhyS — 0-5LDD(3V3) — В Выходное напряже- ние НИЗКОГО уровня7* Hol Zols ~ 3 мА — — 0.4 В Входной ток утечки12) 4i H=KDD — 2 4 мкА ^ = 5 В — 10 22 мкА Выводы генератора Входное напряжение XTAL1 ^XTALl 0 — 18 В Выходное напряже- ние XTAL2 ^XTAL2 0 — 1.8 В Входное напряжение RTXC1 Hrtxci 0 — 1.8 В Выходное напряже- ние RTXC2 ^RTXC2 0 — 1.8 В Выводы USB Ток утечки высокоим- пендансного состоя- ния линии данных 4o 0B< ^<3.3 В — — ±10 мкА Входное напряжение линии в USB-разъеме ^BUS — — 5.25 В Входная дифференциальная чувствительность *di |(D+)-(D-)| 0.2 — — В Диапазон дифференциальных сигналов Исм Включает KD1 0.8 — 2.5 В
Статические характеристики LPC2141/42/44/46/48 551 (продолжение) Параметр Символ Условия Min Tip0 Max 0! I! Пороговое напряже- ние переключения приемника f'SE 0.8 — 2.0 В Выходной НИЗКИЙ уровень HOL Rl 15 кОм на 3.6 В — — 0.3 в Выходной ВЫСО- КИЙ уровень *он Rl 15 кОм на GND 2.8 — 3.6 в Емкость трансивера Qh Относительно GND — — 20 пФ Выходное сопротив- ление драйвера Zdrv В стабильном состоянии 29'3) — 44 Ом Подтягивающий к «плюсу» питания ре- зистор ^PU SoftConnect = ON 1.1 — 1.9 кОм ^Типовые значения не гарантируются. Указанные значения приведены для комнатной тем- пературы (+25°С) и номинального напряжения питания. 2) Шина ядра и внутренняя шина. 3) Типично модуль RTC перестает функционировать, когда напряжение его питания ИВАТ ста- новится ниже 1.6 В. 4) Включая напряжение на выходах в 3-м состоянии. 5) Питающее напряжение KDD(3v3) должно присутствовать. 6) Выводы с 3-м состоянием переходят в 3-е состояние, когда напряжение ИОО(ЗУз) пропадает. 7) На всех линиях питания присутствуют шумы со амплитудой до 100 мВ. 8) Только заданный короткий период времени. 9) Минимальное значение для V\ = 4.5 В, максимальное значение для = 5.5 В. 10) Относится к Р1.16...Р1.16. 11) Оптимизировано для пониженного энергопотребления от батареи. ’^Относительно Kss. 13) Включает внешние резисторы 18 Ом ± 1% на линиях D 4- и D-.
Приложение 3. СТАТИЧЕСКИЕ ХАРАКТЕРИСТИКИ АЦП МИКРОКОНТРОЛЛЕРОВ LPC2000 Статические характеристики LPC2101 /02/03 KDDA = 2.5...3.6 В. Для температуры окружающей среды от -4О...+85°С (-4О...+125°С для LPC2292/94), если не указано иное. Тактовая частота АЦП составляет 4.5 МГц. Параметр Символ Условия Min Tip Max Единица измерения Входное аналоговое напряжение >1А 0 — ^DDA В Входная емкость C*iss — 1 пФ Дифференциальная нелинейность Ed 1),2),3) — ±1 lsb8) Интегральная нелинейность Е L(adj) 0,4) — ±2 LSB Ошибка смещения Ео 0,5) — ±3 LSB Ошибка усиления Eg 1),6) — ±0.5 % Абсолютная ошибка Ет 0,7) — ±4 LSB Сопротивление источника входного напряжения (для LPC2141/42/44/46/48) ^vsi — — 40 кОм ° Условия: LSSA = 0 В, KDDA = 3.3 В. 2) Аналого-цифровое преобразование монотонное, без пропуска кодов. 3) Дифференциальная нелинейность (ED) — различие между фактической шириной шага и идеальной шириной шага (см. Рис. П3.1). 4) Интегральная нелинейность (EL) — пиковая величина разницы между центрами соответс- твующих шагов фактической и идеальной характеристики преобразования, после компенсации ошибок усиления смещения (см. Рис. П3.1). 5) Ошибка смещения (Ео) — абсолютная величина, на которую прямая линия, аппрокси- мирующая фактическую кривую характеристики преобразования, сдвинута относительно прямой линии, аппроксимирующей идеальную кривую характеристики преобразования (см. Рис. П3.1). 6) Ошибка усиления (EG) — относительная величина (в процентах), характеризующая, на- сколько изменяется величина сдвига между прямой линией, аппроксимирующей фактическую кривую характеристики преобразования, и прямой линией, аппроксимирующей идеальную кри- вую характеристики преобразования, после компенсации ошибки смещения (см. Рис. П3.1). 7) Абсолютная ошибка по напряжению (Ет) — максимальное различие между центрами соот- ветствующих шагов кривой фактической характеристики преобразования некалиброванного АЦП и кривой идеальной характеристики преобразования (см. Рис. П3.1). 8) LSB — последний (младший) значащий бит АЦП. Например, для 8-битного АЦП LSB со- ставляет 1/256 от величины опорного напряжения.
Статические характеристики LPC2101/02/03 ,553 Ошибка Ошибка (1) Примерная реальная характеристика преобразования. (2) Идеальная характеристика преобразования. (3) Ошибка, обусловленная дифференциальной нелинейностью (Ed). (4) Интегральная нелинейность (El). (5) Центр ступеньки реальной характеристики преобразования. Рис. П3.1. Характеристики АЦП микроконтроллеров LPC2000
Приложение 4. ДИНАМИЧЕСКИЕ ХАРАКТЕРИСТИКИ МИКРОКОНТРОЛЛЕРОВ LPC2000 Динамические характеристики LPC210X, LPC213X, LPC214X При температуре окружающей среды Га = О...+7О°С для коммерческих при- ложений (—4О...+85°С для LPC214x), и -4О...+85°С для индустриальных прило- жений, напряжения HDD(lV8) и nDD(3V3) лежат в диапазоне1*, указанном в специ- фикации. Параметр Символ Условия Min Tip2) Max Единица измерения Внешние тактовые импульсы Частота генератора fosc 10 — 25 МГц Период тактовой частоты UCLK) 40 — 100 нс Длительность импульса ВЫСОКОГО уровня тактовой частоты ZCHCX Tcy(CLK) x 0.4 — — нс Длительность импульса НИЗКОГО уровня тактовой частоты ZCLCX 7"cy(CLK) x 0.4 — — НС Длительность фронта импуль- са тактовой частоты ZCLCH — — 5 НС Длительность спада импульса тактовой частоты zchcl — — 5 НС Линии портов (исключая Р0.2 и РО.З) Длительность фронта на выходе A-(o) — 10 — НС Длительность спада на выходе Zf(o) — 10 — НС Линиц.интерфейса I2C (Р0.2 и РО.З) Длительность спада на выходе3) Zf(o) "От Г,н к r,L 20 + 0.1 xCb — — НС ’) Параметры указаны для всего рабочего температурного диапазона, если не указано иное. 2) Типовые значения не гарантируются. Указанные значения приведены для комнатной тем- пературы (+25°С) и номинального напряжения питания. 3) Емкость шины Сь составляет от 10 до 400 пФ.
Динамические характеристики LPC2114/24/19/29 и LPC2210/20/90/92/94 555 Динамические характеристики LPC2114/24/19/29 и LPC2210/20/90/92/94 При температуре окружающей среды Га = О...+7О°С для коммерческих при- ложений и -4О...+85°С для индустриальных приложений (-4О...+125°С для LPC2292/94), напряжения KDD(1V8) и KDD(3V3) лежат в диапазоне0, указанном в спецификации. Параметр Символ Условия Min Tip1* Max Единица измерения Внешние тактовые импульсы Тактовая частота при использовании внешнего генератора (сигнального генератора) fosc 10 — 50 МГц Тактовая частота при использовании генератора с внешним кварцевым резонатором fosc 1 — 30 МГц Тактовая частота при использовании встроенной системы ФАПЧ fosc 10 — 25 МГц Тактовая частота при загрузке кода в режиме ISP fosc 10 — 25 МГц Период тактовой частоты zc 20 — 1000 нс Длительность импульса ВЫСОКОГО уровня тактовой частоты ZCHCX tc x 0.4 — — нс Длительность импульса НИЗКОГО уровня тактовой частоты ZCLCX tc x 0.4 — — нс Длительность фронта импульса такто- вой частоты ZCLCH — — 5 НС Длительность спада импульса тактовой частоты ZCHCL — — 5 НС Линии портов (исключая Р0.2 и РО.З) Длительность фронта на выходе Zr(o) — 10 — НС Длительность спада на выходе Zf(o) — 10 — НС Линии интерфейса I2C (Р0.2 и РО.З) Длительность спада на выходе2* Zf(o) От Ин к Hl 20 + 0.1 xCb — — НС ’* Параметры указаны для всего рабочего температурного диапазона, если не указано иное. 2) Емкость шины Сь составляет от 10 до 400 пФ. Рис. П4.1. Характеристики тактовой частоты микроконтроллеров LPC2000
Приложение 5. ПРИНЦИПИАЛЬНАЯ СХЕМА ОДНОГО ИЗ ВОЗМОЖНЫХ ИСПОЛНЕНИЙ ИНТЕРФЕЙСА WIGGLER Рис. П5.1. Принципиальная схема интерфейса Wiggler
Приложение 6. ТАБЛИЦА ФОНТОВ (ШРИФТОВ) ДЛЯ РУСИФИЦИРОВАННОГО ЖКИ СО ВСТРОЕННЫМ КОНТРОЛЛЕРОМ УПРАВЛЕНИЯ, СОВМЕСТИМЫМ С HD44780 Старшие 4 бита (D4-D7) кода символа (шестнадцатеричное значение) 0 1 2 3 4 5 6 7 8 9 A в c D E F 0 CG RAM (1) a aaaaa a a a a 1 CG RAM (2) "ilia 2 CG RAM (3) ! B 3 CG RAM (4) щИ " >»> aaaa" aaa' a"""Z 4 CG RAM (5) B "aaaa "a | ' < Младшие 4 бита (D0-D3) кода символа (шестнадцатеричное значение) 5 CG RAM (6) a"""a aa"aa 6 CG RAM (7) a a 'Bl 7 CG RAM (8) B a a 8 CG RAM (1) I1"1! a a a 9 CG RAM (2) "aaaa aa a a aa А CG RAM (3) a aaaaa a a В CG RAM (4) a aaa С CG RAM (5) a aaa aaa a a a a a a a aa a a D CG RAM -(6) aaa "a Е CG RAM (7) a a aa a F CG RAM (8) aaaa a"""a aaaaa aaaaa aaaaa aaaaa aaaaa ""aaa Рис. П6.1. Таблица фонтов (шрифтов) для русифицированного ЖКИ
Материалы, размещенные на компакт-диске На компакт-диске, прилагающемся к данной книге, представлены (на анг- лийском языке) справочные материалы и подробная техническая документация на микроконтроллеры семейства LPC2000 от фирм-производителей, а также статьи, посвященные различным аспектам применения микроконтроллеров се- мейства LPC2000 и их периферийных устройств. Кроме того, диск содержит по- лезные программные утилиты, средства разработки для микроконтроллеров се- мейства LPC2000 и примеры пользовательских программ и проектов, отлажен- ных автором данной книги и снабженных подробными комментариями на русском языке. Содержимое компакт-диска, для удобства пользователя, рассортировано по нескольким подкаталогам: • Исходные тексты всех программ из книги. • Примеры программ, библиотеки драйверов и базовых функций. • Технические описания микроконтроллеров семейства LPC2000 (User Manuals и Data Sheets). • Полезные статьи и иные материалы по теме данной книги. • Примеры учебных и демопроектов, а также управляющих программ для LPC2000. • Свободно распространяемое инструментальное программное обеспече- ние и средства разработки-отладки для LPC2000. • Полезные утилиты.