- •Перечень сокращений
- •Предисловие
- •Введение
- •Часть 1. Архитектура и аппаратные средства микроконтроллера LPC214x
- •1.1 Общие сведения о микроконтроллерах LPC214x
- •1.2 Программистская модель процессорного ядра ARM7TDMI
- •1.2.1 Режимы работы ядра ARM7
- •1.2.2 Система регистров
- •1.2.3 Слово состояния программы
- •1.2.4 Организация памяти
- •1.3 Система команд
- •1.3.1 Команды арифметической и логической обработки
- •1.3.2 Команды умножения
- •1.3.3 Команды регистровой пересылки
- •1.3.4 Команды загрузки и сохранения регистров
- •1.3.5 Команды пакетного обмена с памятью
- •1.3.6 Команды передачи управления
- •1.3.7 Команды обращения к слову состояния программы
- •1.4 Методы адресации
- •1.4.1 Непосредственная адресация
- •1.4.2 Регистровая адресация
- •1.4.3 Косвенная адресация
- •1.4.4 Индексная адресация
- •1.5 Процедура начальной загрузки и режимы отображения памяти
- •1.6 Обработка исключительных ситуаций
- •1.7 Система тактирования
- •1.7.1 Выбор тактовой частоты микроконтроллера
- •1.7.2 Настройка тактирования периферийных устройств
- •1.8 Модуль ускорения памяти
- •1.9 Внешние выводы микроконтроллера
- •1.9.1 Служебные контакты
- •1.9.2 Программно-управляемые линии ввода-вывода
- •1.9.3 Альтернативные функции линий ввода вывода
- •1.10 Цифровые порты ввода-вывода
- •1.10.1 Управление портом через низкоскоростную шину
- •1.10.2 Управление портом через высокоскоростную шину
- •1.11 Система прерываний
- •1.11.1 Назначение системы прерываний
- •1.11.2 Процесс обработки прерываний IRQ
- •1.11.3 Процесс обработки быстрых прерываний FIQ
- •1.11.4 Регистры управления системой прерываний
- •1.11.5 Порядок настройки прерывания IRQ
- •1.11.6 Порядок настройки быстрого прерывания FIQ
- •1.11.7 Процедура обработки прерывания
- •1.11.8 Задержка обработки прерывания
- •1.12 Внешние прерывания
- •1.12.1 Регистры управления блоком внешних прерываний
- •1.12.2 Порядок настройки блока внешних прерываний
- •1.13 Таймеры-счетчики
- •1.13.1 Режим таймера и схема совпадения
- •1.13.2 Режим счетчика
- •1.13.3 Схема захвата
- •1.13.4 Управляющие регистры
- •1.13.5 Формирование интервалов времени через систему прерываний
- •1.13.6 Измерение периода и длительности импульса с помощью устройства захвата
- •1.13.7 Подсчет числа импульсов в единицу времени
- •1.14 Широтно-импульсный модулятор
- •1.14.1 Основы функционирования
- •1.14.2 Дополнительные возможности
- •1.14.3 Регистры управления ШИМ
- •1.14.4 Порядок настройки ШИМ
- •1.15 Аналого-цифровые преобразователи
- •1.15.1 Краткие сведения о встроенных АЦП
- •1.15.2 Общие рекомендации по использованию АЦП
- •1.15.3 Управляющие регистры
- •1.15.4 Порядок настройки АЦП
- •1.15.5 Программный запуск аналого-цифрового преобразователя
- •1.15.6 Запуск аналого-цифрового преобразователя по таймеру
- •1.15.7 Программный опрос готовности АЦП
- •1.15.8 Опрос готовности АЦП по прерыванию
- •1.15.9 Считывание и масштабирование результата АЦП
- •1.16 Цифро-аналоговый преобразователь
- •1.16.1 Регистр управления ЦАП
- •1.16.2 Рекомендации по применению ЦАП
- •1.17 Последовательный синхронный приемо-передатчик SPI
- •1.17.1 Назначение и основы функционирования интерфейса SPI
- •1.17.2 Управляющие регистры
- •1.17.3 Передача и прием данных в режиме ведущего
- •1.17.4 Передача и прием данных в режиме ведомого
- •1.18 Последовательный синхронный приемо-передатчик I2С
- •1.18.1 Назначение и основы функционирования интерфейса I2С
- •1.18.2 Управляющие регистры
- •1.18.3 Настройка модуля I2C
- •1.18.4 Типовые циклы обмена данными по шине I2C
- •1.19 Последовательный асинхронный приемопередатчик UART
- •1.19.1 Назначение и основы функционирования порта UART
- •1.19.2 Управляющие регистры
- •1.19.3 Настройка порта UART
- •1.19.4 Прием байта с опросом флага
- •1.19.5 Передача байта с опросом флага
- •1.19.6 Прием и передача данных с использованием прерываний
- •1.19.7 Прием и передача пакетов данных
- •1.19.8 Диагностика ошибок
- •1.19.9 Автоматическая настройка скорости
- •1.20 Часы реального времени
- •1.20.1 Основные возможности часов реального времени
- •1.20.2 Управляющие регистры
- •1.20.3 Рекомендации по применению
- •1.21 Управление питанием и идентификация источников сброса
- •1.21.1 Краткие сведения о мониторе питания
- •1.21.2 Управляющие регистры
- •Часть 2. Разработка и отладка программ с помощью современных инструментальных средств
- •2.1 Форматы представления чисел
- •2.1.1 Основные коды представления целых чисел
- •2.1.2 Форматы представление целых чисел, приятные в языке Си
- •2.1.3 Форматы чисел c плавающей точкой стандарта IEEE754
- •2.2 Основы программирования на языке Си
- •2.2.1 Структура программы
- •2.2.2 Числовые константы
- •2.2.3 Переменные и именованные константы
- •2.2.4 Оператор присваивания, выражения и операции
- •2.2.5 Условный оператор
- •2.2.6 Приведение и преобразование типов
- •2.2.7 Массивы
- •2.2.8 Строки символов
- •2.2.9 Структуры
- •2.2.10 Объединения
- •2.2.11 Указатели
- •2.2.12 Ветвление
- •2.2.13 Множественное ветвление
- •2.2.14 Цикл со счетчиком
- •2.2.15 Циклы с предусловием и постусловием
- •2.2.16 Функции
- •2.2.17 Некоторые директивы компилятора
- •2.2.18 Библиотека математических функций MATH.h
- •2.2.19 Функция создания форматированных строк SNPRINTF
- •2.2.20 Ассемблер в Си-программах
- •2.3 Интегрированная среда разработки Keil µVision 4
- •2.3.1 Создание проекта
- •2.3.2 Создание файла программы
- •2.3.3 Настройка проекта
- •2.3.4 Набор текста программы
- •2.3.5 Компиляция программы
- •2.3.6 Отладка программы
- •2.3.7 Основные отладочные инструменты среды Keil µVision 4
- •2.3.8 Управление распределением памяти
- •2.4 Методика отладки программ
- •2.4.1 Быстрый поиск ошибок
- •2.4.2 Ввод и вывод дискретных сигналов
- •2.4.3 Таймер-счетчик. Формирование интервалов времени
- •2.4.4 Таймер-счетчик. Формирование внешних сигналов совпадения
- •2.4.5 Таймер-счетчик. Счетчик внешних событий
- •2.4.6 Таймер-счетчик. Устройство захвата
- •2.4.7 Широтно-импульсный модулятор
- •2.4.8 Аналого-цифровой преобразователь
- •2.4.9 Цифро-аналоговый преобразователь
- •2.4.10 Приемопередатчик SPI
- •2.4.11 Приемопередатчик I2C
- •2.4.12 Приемопередатчик UART
- •2.4.13 Часы реального времени
- •2.5 О программировании ARM7 на ассемблере
- •2.5.1 Основные правила записи программ на ассемблере
- •2.5.2 Псевдокоманды
- •2.5.3 Директивы ассемблера
- •2.5.4 Макросы
- •2.5.5 Пример простой программы
- •2.6 Распространенные средства разработки и отладки
- •2.6.1 Демонстрационные платы EA-EDU-001 и EA-EDU-011
- •2.6.2 Внутрисхемный отладчик J-Link
- •2.6.3 Утилиты программирования ПЗУ LPC Flash Utility и FlashMagic
- •2.6.4 Программа-терминал 232Analyzer
- •2.6.5 Низкоуровневый редактор диска DMDE
- •Часть 3. Решение типовых задач локального управления
- •3.1 Формирование временной задержки с помощью цикла
- •3.1.1 Задание
- •3.1.2 Общие рекомендации
- •3.1.3 Алгоритм программы
- •3.1.4 Отладка
- •3.1.5 Дополнительные сведения о формировании временной задержки
- •3.2 Формирование дискретного сигнала с помощью таймера
- •3.2.1 Задание
- •3.2.2 Общие рекомендации
- •3.2.3 Алгоритм программы
- •3.3 Опрос дискретного датчика или кнопки
- •3.3.1 Задание
- •3.3.2 Общие рекомендации
- •3.3.3 Алгоритм программы
- •3.3.4 Отладка
- •3.4 Опрос состояния механических контактов с подавлением дребезга
- •3.4.1 Задание
- •3.4.2 Общие рекомендации
- •3.4.3 Алгоритм программы
- •3.4.4 Отладка
- •3.5 Опрос клавиатуры с автоповтором
- •3.5.1 Задание
- •3.5.2 Общие рекомендации
- •3.5.3 Алгоритм программы
- •3.5.4 Отладка
- •3.6 Формирование импульсного управляющего сигнала с помощью модуля ШИМ
- •3.6.1 Задание
- •3.6.2 Общие сведения
- •3.6.3 Алгоритм программы
- •3.6.4 Отладка
- •3.6.5 Синхронизация внешним сигналом
- •3.7 Формирование сигналов специальной формы с помощью ЦАП
- •3.7.1 Задание
- •3.7.2 Основы
- •3.7.3 Алгоритм программы
- •3.7.4 Повышение точности генерирования частоты
- •3.7.5 Выбор числа дискрет
- •3.8 Управление двухфазным шаговым двигателем
- •3.8.1 Задание
- •3.8.2 Общие сведения
- •3.8.3 Алгоритм программы
- •3.9 Применение ШИМ для формирования низкочастотных аналоговых сигналов
- •3.9.1 Задание
- •3.9.2 Основные сведения
- •3.9.3 Алгоритм основной программы
- •3.9.4 Алгоритм процедуры обработки прерывания
- •3.10 Управление символьным жидкокристаллическим индикатором
- •3.10.1 Задание
- •3.10.2 Управление модулем жидкокристаллической индикации
- •3.10.3 Разработка функции управления ЖКИ с ожиданием готовности
- •3.10.4 Функция вывода строки символов
- •3.10.5 Разработка функции инициализации модуля ЖКИ
- •3.10.6 Разработка тестовой программы
- •3.10.7 Управление ЖКИ с опросом флага готовности
- •3.10.8 Программирование произвольных символов
- •3.11 Управление матричным светодиодным индикатором
- •3.11.1 Задание
- •3.11.2 Основные рекомендации
- •3.11.3 Алгоритм основной программы
- •3.11.4 Алгоритм процедуры обработки прерывания
- •3.11.5 Реализация движения строки
- •3.12 Управление матричным жидкокристаллическим дисплеем
- •3.12.1 Управление дисплеем на основе контроллера PCF8833
- •3.12.2 Построение простейших геометрических фигур
- •3.13 Измерение постоянного напряжения
- •3.13.1 Задание
- •3.13.2 Основные рекомендации
- •3.13.3 Алгоритм основной программы
- •3.13.4 Алгоритм процедуры обработки прерывания от АЦП
- •3.13.5 АЦП с циклическим опросом нескольких каналов
- •3.13.6 Автоматический выбор пределов измерения
- •3.14 Измерение параметров уровня переменного напряжения
- •3.14.1 Задание
- •3.14.2 Основные рекомендации
- •3.14.3 Алгоритм основной программы
- •3.14.4 Алгоритм процедуры обработки прерывания
- •3.15 Измерение ускорения с помощью трехосевого акселерометра
- •3.16 Измерение интервалов времени с помощью таймера
- •3.16.1 Задание
- •3.16.2 Общие рекомендации
- •3.16.3 Алгоритм основной программы
- •3.16.4 Алгоритм процедуры обработки прерывания
- •3.16.5 Повышение разрешающей способности путем усреднения
- •3.16.6 Введение поправок
- •3.17 Измерение частоты с помощью счетчика
- •3.17.1 Задание
- •3.17.2 Основные рекомендации
- •3.17.3 Алгоритм программы
- •3.17.4 Повышение точности измерений
- •3.18 Опрос цифрового датчика температуры. Интерфейс I2C
- •3.18.1 Задание
- •3.18.2 Общие рекомендации
- •3.18.3 Алгоритм программы
- •3.20 Обмен данными с электрически перепрограммируемым ПЗУ
- •3.20.1 Задание
- •3.20.2 Общие сведения о микросхемах EEPROM
- •3.20.3 Адресация в микросхемах EEPROM
- •3.20.4 Порядок чтения EEPROM
- •3.20.5 Порядок записи EEPROM
- •3.20.6 Разработка программы чтения EEPROM
- •3.20.7 Разработка функции записи блока данных в EEPROM
- •3.21 Интерфейс RS-232. Прием и передача простых команд
- •3.21.1 Задание
- •3.21.2 Алгоритм программы
- •3.21.3 Автоматическая настройка скорости
- •3.22.1 Задание
- •3.22.2 Основные рекомендации
- •3.22.3 Алгоритм программы
- •3.23 Интерфейс RS-232. Прием пакета переменной длины
- •3.23.1 Задание
- •3.23.2 Основы реализации
- •3.23.3 Алгоритм программы
- •3.24 Обмен данными с картой памяти Secure Digital
- •3.24.1 Задание
- •3.24.2 Общие сведения о карах FLASH-памяти SD/MMC
- •3.24.3 Команды SD/MMC
- •3.24.4 Процедура инициализации карты
- •3.24.5 Чтение и запись данных
- •3.24.6 Обработка ошибок
- •3.24.7 Комментарии к алгоритму и программе
- •Алфавитный указатель управляющих регистров
- •Список литературы
- •Содержание
разработки с интегрированным Си-компилятором: µVision фирмы Keil и Embedded Workbench фирмы IAR. Внутрисхемная отладка обеспечивается такими средствами, как U-Link2 (фирмы Keil), J-Link (фирмы Segger), а также их многочисленными дешевые аналогами.
В дальнейшем будем рассматривать микроконтроллер LPC2148 фирмы NXP (старший из серии LPC214x), который можно назвать типичным представителем семейства ARM7. Приведем основные параметры и перечислим наиболее важные встроенные аппаратные средства этой микросхемы.
а) Максимальная тактовая частота 60 МГц. б) ПЗУ (FLASH-память) объемом 512 кбайт. в) ОЗУ объемом 40 кбайт.
г) Два 32-разрядных таймера-счетчика, модуль ШИМ с отдельным таймером, сторожевой таймер, часы реального времени с автономным питанием и тактированием.
д) Два десятиразрядных АЦП с временем преобразования 2,44 мкс. е) Десятиразрядный ЦАП с временем установления 1 мкс.
ж) Приемопередатчики интерфейсов: два UART, два I2C, SPI, SSP, USB 2.0 в режиме Full Speed (12 МГц) с прямым доступом к памяти.
и) Гибкая система управления энергопотреблением.
Следующие разделы первой части настоящего учебного пособия посвящены описанию архитектуры ARM7TDMI и аппаратных узлов микроконтроллера LPC2148.
1.2 Программистская модель процессорного ядра ARM7TDMI
Составляя программу, программист в основном абстрагируется от устройства аппаратных средств микропроцессора и имеет дело лишь с регистрами общего назначения, регистрами специальных функций и набором ячеек памяти. Эти ресурсы будем называть программистской моделью микропроцессора или микроконтроллера. Схема программистской модели и организации памяти приведена на рисунке 1.2.1.
1.2.1 Режимы работы ядра ARM7
Процессорное ядро ARM7 имеет шесть режимов работы. От выбранного режима зависит доступный набор регистров общего назначения. Смена режима может происходить аппаратно или выполняться программно путем записи кода в регистр состояния программы СPSR (раздел 1.2.2) командой MSR. Ниже перечислены все режимы и даны краткие пояснения по поводу назначения каждого из них (см. также раздел 1.6).
а) Режимы User и System предназначены для выполнения программы пользователя или операционной системы; это основной режим работы ядра.
б) Supervisor — режим программного прерывания. Приход в этот режим происходит при сбросе, выполнении инструкции SWI или переполнении счетчика команды.
в) Переход в режим Abort происходит при обращении к недопустимому адресу памяти (исключительные ситуации PAbort и DAbort).
9
г) Переход в режим Undefined производится в случае попытки выполнения неопределенной команды (исключительная ситуация Undefined).
д) IRQ — режим прерывания, классифицированного как IRQ.
е) FIQ — режим прерывания, классифицированного как FIQ (быстрое прерывание).
Все режимы кроме User называются привилегированными. В этих режимах доступны некоторые функции управления ядром, которые не доступны в режиме User.
1.2.2 Система регистров
Арифметико-логическое устройство МК взаимодействует с 16 регистрами общего назначения, обозначаемыми R0–R15 (рисунок 1.2.1). Регистры R0–R12 доступны для размещения данных. Регистр R13 (SP) служит указателем стека; в нем хранится адрес вершины стека, организованного в памяти данных. R14 (LR) — регистр связи, предназначенный для хранения адреса возврата при вызове прерываний и подпрограмм. R15 (PC) — счетчик команд, содержащий адрес следующей команды.
В каждом привилегированном (то есть кроме User/System) режиме имеется своя пара регистров R13, R14. На схеме (рисунок 1.2.1) они обозначены R13_xxx, R14_xxx, где xxx — идентификатор режима. При смене режима используются эти копии, а оригинальное содержимое R13, R14 основного режима User/System сохраняется неизменным. Это необходимо для полного восстановления состояния ядра при возврате в режим User/System. Вполне очевидно, что счетчик команд R15 не должен ни сохраняться, ни восстанавливаться при смене режима, поэтому он не имеет копий. Для режима быстрого прерывания FIQ предусмотрен второй набор регистров R8–R12. Эти «дублеры» R8–R12 можно использовать в процедуре обработки быстрого прерывания, не затрачивая времени на сохранение в стек оригинальных регистров режима User/System и на последующее их восстановление.
Регистр состояния программы CPSR содержит флаги результатов арифметических операций и биты управления режимом ядра (раздел 1.2.3). Изменение регистра CPSR программным путем возможно только в привилегированных режимах. Для сохранения слова состояния программы имеются регистры SPSR_xxx, где xxx — идентификатор режима.
1.2.3 Слово состояния программы
Схема флагов и управляющих битов слова состояния программы CPSR показана на рисунке 1.2.1 (внизу).
Флаги результата арифметических операций, устанавливаются автоматически при обработке данных в АЛУ инструкциями, вызванными с модификатором {S} (раздел 1.4 и таблица 1.4.2). В таблице 1.2.1 даны примеры влияния на флаги операции сложения. Рассмотрим назначение флагов слова состояния программы CPSR.
● Бит 31 (N) — флаг устанавливается в единицу, если результат вычислений в АЛУ отрицательный, то есть если старший (31-ый) разряд результата равен единице.
10
ARM7 ядра памяти организация и модель Программистская – 1.2.1 Рисунок LPC2148) микроконтроллера примере на(
11
|
|
|
|
User/System |
|
FIQ |
Supervisor |
|
Abort |
|
|
|
|
IRQ |
|
Undefined |
||||||||
Режимы: |
|
|
Выполнение |
Быстрое |
Программное |
|
Ошибка |
|
|
Прерывание |
Неопределен- |
|||||||||||||
|
|
|
|
программы |
|
прерывание |
прерывание |
|
адреса |
|
|
|
|
|
|
|
ная команда |
|||||||
|
|
|
|
|
|
R0 |
|
R0 |
R0 |
|
R0 |
|
|
|
|
R0 |
|
R0 |
||||||
|
|
|
|
|
|
R1 |
|
R1 |
R1 |
|
R1 |
|
|
|
|
R1 |
|
R1 |
||||||
|
|
|
|
|
|
R2 |
|
R2 |
R2 |
|
R2 |
|
|
|
|
R2 |
|
R2 |
||||||
|
|
|
|
|
|
R3 |
|
R3 |
R3 |
|
R3 |
|
|
|
|
R3 |
|
R3 |
||||||
|
|
|
|
|
|
R4 |
|
R4 |
R4 |
|
R4 |
|
|
|
|
R4 |
|
R4 |
||||||
Регистры |
|
|
|
|
R5 |
|
R5 |
R5 |
|
R5 |
|
|
|
|
R5 |
|
R5 |
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
общего |
|
|
|
|
R6 |
|
R6 |
R6 |
|
R6 |
|
|
|
|
R6 |
|
R6 |
|||||||
назначения |
|
|
R7 |
|
R7 |
R7 |
|
R7 |
|
|
|
|
R7 |
|
R7 |
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
R8 |
|
R8_fiq |
R8 |
|
R8 |
|
|
|
|
R8 |
|
R8 |
||||||
|
|
|
|
|
|
R9 |
|
R9_fiq |
R9 |
|
R9 |
|
|
|
|
R9 |
|
R9 |
||||||
|
|
|
|
|
|
R10 |
|
R10_fiq |
R10 |
|
R10 |
|
|
|
|
R10 |
|
R10 |
||||||
|
|
|
|
|
|
R11 |
|
R11_fiq |
R11 |
|
R11 |
|
|
|
|
R11 |
|
R11 |
||||||
|
|
|
|
|
|
R12 |
|
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 |
||||||||||
Регистры сохраненного состояния |
|
SPSR_fiq |
SPSR_svc |
SPSR_abt |
SPSR_irq |
|
SPSR_und |
|||||||||||||||||
31 |
30 |
29 |
28 |
27 |
|
|
8 |
7 |
6 |
5 |
4 |
3 |
0 |
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
CPSR N |
Z C |
V |
|
|
|
|
I |
F |
T |
|
|
MODE |
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
Переполнение |
Разрешить прерывания IRQ |
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
Thumb |
|
Режим |
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
Перенос |
Разрешить прерывания FIQ |
|
|
|
|
|
|
|
|
|
|
|||||
Отрицатель- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ный результат |
|
|
|
|
|
|
Нулевой результат |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Отображаемая область векторов прерываний
Устройства AHB
Устройства VPB
Загрузчик 12 кбайт
Буфер USB 8 кбайт
Память данных ОЗУ
32 кбайта
Порты ввода-вывода
Память программ
Flash-ПЗУ
512 кбайт
Резерв
Fast Int. Request
Int. Request
Checksum
Data Abort
Prefetch Abort
Sowftware Int.
Undefined
Reset
0xFFFFFFFF
0xF0000000
0xEFFFFFFF
0xE0000000
0x7FFFFFFF
0x7FFFD000
0x7FD01FFF
0x7FD00000
0x40007FFF
0x40000000
0x3FFFFFFF
0x3FFF8000
0x0007FFFF
0x00000040
0x0000003F
0x00000020
0x0000001C
0x00000018
0x00000014
0x00000010
0x0000000C
0x00000008
0x00000004
0x00000000
Таблица 1.2.1 – Примеры влияния операции сложения на флаги результата
Операция |
Результат |
C |
V |
N |
Z |
|
|
1 |
0 |
0 |
0 |
|
|
0 |
1 |
0 |
0 |
|
|
0 |
0 |
1 |
0 |
|
|
1 |
1 |
0 |
0 |
|
|
1 |
0 |
0 |
1 |
|
|
0 |
1 |
1 |
0 |
|
|
1 |
0 |
1 |
0 |
●Бит 30 (Z) — флаг устанавливается в единицу, если результат вычислений в АЛУ равен нулю.
●Бит 29 (С) — флаг переноса, инверсный влаг заема. При сложении беззнаковых чисел флаг устанавливается в единицу, если произошел перенос из 31-го разряда, то есть если результат вычислений в АЛУ больше . При вычитании беззнаковых чисел флаг сбрасывается в ноль, если произошел заем из несуществующего 32-го разряда, то есть если результат вычислений в АЛУ меньше нуля.
●Бит 28 (V) — флаг арифметического переполнения. При сложении и вычитании чисел со знаком флаг устанавливается в единицу, если результат вычислений в АЛУ больше или меньше . Такой результат приводит к потере знака. Иными словами, флаг устанавливается в единицу, если знаковый (31-ый) разряд обоих операндов одинаков и отличается от знакового разряда результата.
●Бит 7 (I) — бит запрета прерываний IRQ. Устанавливается аппаратно в единицу в исключительных ситуациях Reset, SWI, IRQ, FIQ. Равенство единице запрещает прерывания IRQ при сбросе и в одноименных режимах.
●Бит 6 (F) — бит запрета прерываний FIQ. Устанавливается в единицу аппаратно в исключительных ситуациях Reset, FIQ. Равенство единицы запрещает прерывания FIQ при сбросе и в режиме FIQ.
●Бит 5 (T) — бит перевода ядра в 16-разрядный режим Thumb ().
Врежиме Thumb меняется программистская модель и система команд микроконтроллера. Производительность в режиме Thumb снижается, но благодаря коротким 16-разрядным командам сокращается расход памяти программ. Режим Thumb в настоящем учебном пособии не рассматривается.
Таблица 1.2.2 – Управление режимом работы ядра через регистр CPSR
|
|
Режим |
Mode (двоичные и шестнадцатеричные значения) |
|
|
|
|
User |
10000 (0x10) |
. |
|
|
FIQ |
10001 (0x11) |
Привилегир |
Исключ. |
|
|
|
|
IRQ |
10010 (0x12) |
||
|
Supervisor |
10011 (0x13) |
||
|
Abort |
10111 (0x17) |
||
|
Undefined |
11011 (0x1B) |
||
|
|
System |
11111 (0x1F) |
|
|
|
|
12