- •Перечень сокращений
- •Предисловие
- •Введение
- •Часть 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 Комментарии к алгоритму и программе
- •Алфавитный указатель управляющих регистров
- •Список литературы
- •Содержание
4. Дождаться состояния 0x28 (данные переданы); передать следующий байт. Если передан последний (или единственный) байт, установить START.
5. Дождаться состояния 0x10 (повторный START передан); снять START; если требуется принять больше одного байта, разрешить подтверждение; передать адрес и . Если байт всего один, пункт 4 пропустить.
6. Дождаться состояния 0x50 (данные получены, подтверждение отправлено); сохранить принятый байт. Если получен предпоследний байт, запретить подтверждение (запретить сразу, если байта всего два).
7. Дождаться состояния 0x58 (данные получены, подтверждение НЕ отправлено). Установить STOP.
В качестве примера приведем шаблон реализации самого сложного цикла «Адрес–Передача–Прием» через опрос флага готовности в регистре
I2C0CONSET.
I2C0CONSET=0x20; while (!Finished)
if (I2C0CONSET & 0x08)
{ |
|
switch |
(I2C0STAT) |
{ |
|
case |
0x08: ... ; break; |
case |
0x18: ... ; break; |
case |
0x28: ... ; break; |
case |
0x10: ... ; break; |
case |
0x50: ... ; break; |
case |
0x58: ... ; Finished=1; |
} |
|
I2C0CONCLR=0x08;
}
Алгоритм упрощается с использованием прерываний. Требуется поместить в процедуру обработки прерывания конструкцию switch...case и команду сброса флага в I2CxCONCLR.
1.19 Последовательный асинхронный приемопередатчик UART
1.19.1 Назначение и основы функционирования порта UART
Последовательный порт UART используется для обмена сообщениями через интерфейсы RS-232 и RS-485, широко распространенные как в компьютерной технике, так и в промышленных системах управления. Сопряжение этих интерфейсов с портом UART обеспечивается соответствующими преобразователями уровней, выпускаемыми в виде интегральных микросхем.
Универсальный асинхронный приемопередатчик (UART) представляет собой асинхронный интерфейс, использующий две линии для передачи данных в обоих направлениях. Скорость передачи данных ограничена 3,75 Мбит/c. Каждый символ может состоять из 5–8 битов, к которым может добавляться бит контроля четности. Младший бит передается первым. Нача-
80
ло и конец символа обозначаются стартовым битом (логический ноль) и стоповым битом (логическая единица). Стоповых битов может быть один или два.
На рисунке 1.19.1 Показаны осциллограммы сигнала, передаваемого по интерфейсу RS-232 персональным компьютером, а также эквивалентного сигнала стандартных уровней ТТЛ/КМОП, полученного с помощью преобразователя уровней MAX232.
Рисунок 1.19.1 – Осциллограммы сигнала RS-232 (вверху) и сигнала на входе RxD микроконтроллера (внизу) при передаче символов 0x89 и 0x39. Параметры сигнала: скорость 9600 бит/с, 8 бит, один стоповый бит, контроль нечетности.
Микроконтроллер LPC2148 оснащен двумя портами UART. Здесь ограничимся рассмотрением только модуля UART0. Другой модуль (UART1) отличается поддержкой полного модемного интерфейса.
Следует указать отличительные особенности портов UART в микроконтроллерах LPC2148: 16-уровневые буферы приемника и передатчика, действующие по принципу очереди; автоматический контроль четности при приеме и формирование бита честности при передаче; развитые средства контроля ошибок; поддержка автоматического определения битовой скорости.
1.19.2 Управляющие регистры
Схема управляющих регистров модуля UART0 показана на
ке 1.19.2.
Регистр U0RBR — вершина буфера-очереди приемника. Содержит самый «старый» принятый байт. Если используется передача символа длиной менее восьми бит, то неиспользуемые старшие разряды заполнены нулями.
При считывании байта из буфера через U0RBR бит доступа к делителю частоты DLAB (см. ниже) должен быть сброшен в ноль.
Регистр U0THR — вершина буфера-очереди передатчика. Байт, загруженный в этот регистр, будет поставлен в очередь и передан после всех байтов, загруженных в U0THR ранее. Запись возможна, если бит доступа к делителю частоты DLAB сброшен в ноль.
81
U0TER – Включение передатчика |
|
|||
11 |
8 |
7 |
6 |
0 |
|
|
EN |
|
|
|
|
TX |
|
|
|
|
Вкл |
|
|
U0LSR – состояние линии |
|
|
||||||||
11 |
8 |
|
7 |
6 |
5 |
4 |
||||
|
|
|
|
E |
|
T |
|
E |
BI |
|
|
|
R |
F |
TEM |
T |
|||||
|
|
X |
|
|
|
HR |
|
|
||
|
Ошибка в ходе приема |
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
||||
|
Передача завершена |
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
||||
|
Буфер передатчика пуст |
|
|
|
|
|||||
|
|
|
|
|
||||||
|
|
Поток прерван |
|
|
||||||
|
|
|
|
3 |
2 |
1 |
0 |
|||
FE |
PE |
OE RDR |
||||
|
|
|
|
|
|
Данные в буфере приемника |
|
|
|
|
|
|
|
|
|
|
|
|
|
Переп. буфера |
|
|
|
|
|
|
|
|
|
|
|
Ошибка четности |
||
|
|
|
|
|||
|
|
Потеря стопового бита |
||||
|
|
U0LCR – управление линией
11 |
8 |
|
7 |
B |
6 |
|
5 |
4 |
||
|
|
|
|
|
|
A |
|
|
||
|
|
|
A |
E |
K |
PARSEL |
||||
|
|
L |
|
R |
|
|
||||
|
|
|
|
|
|
|
||||
|
|
D |
|
|
|
B |
|
|
|
|
Разр. настр. скорости |
|
|
|
|
Блок. |
Чет/ |
||||
|
|
|
|
|||||||
|
|
|
|
|
|
|
нечет |
|||
|
|
|
|
|
|
|
|
|
||
U0FCR – управление буфером |
|
3 |
2 |
||
AR |
|
|
P |
O |
|||
P N |
ST |
||
E |
|||
Контр. |
|
|
|
|
|||
чет. |
|
|
|
1 |
0 |
WLEN |
|
Число бит |
|
Число стоповых |
11 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
TRIGLEV
TX |
|
X |
|
|
O |
||
S |
R |
|
S |
IF |
N |
||
|
|
F |
|
||||
RE |
|
RE |
|
E |
Число байт до |
Сбр. буф. TX |
|
|
|
Вкл. буферы |
|
|
|
|||
прерывания |
|
|
|
||
|
Сбр. буф. RX |
||||
|
|
||||
U0IIR – идентификация прерывания |
|
|
|
|
11 |
10 |
9 |
|
8 |
||
|
|
|
O |
|
|
O |
|
|
E |
|
T |
||
|
|
AB |
|
B |
|
|
|
|
|
A |
|
|
|
Ошибка опр. скорости |
|
|
|
|||
|
|
|
||||
Скорость определена |
|
|
|
|||
|
|
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
FIFOEN |
|
|
|
IDENT |
|
IP |
||
Буферы |
|
|
Идентиф. прер. |
|
Флаг прерывания |
|||
|
|
|
||||||
включены |
|
|
|
события |
|
|
||
|
|
|
|
|
|
U0IER – управление прерывающими событиями
11 |
10 |
9 |
|
8 |
7 |
4 |
3 |
2 |
|
1 |
|
|
|
|
|
T |
|
|
|
LS |
|
R |
|
|
|
O |
|
|
O |
|
|
|
X |
|
E |
|
|
BE |
B |
|
|
|
|
H |
|||
|
|
A |
A |
|
|
|
|
|
R |
T |
|
0 RBR
Ошибка опр. скорости |
|
Ошибка в ходе приема |
|
|
Данные в буфере приемника |
|
|
|
|||
|
|
|
|
||
Скорость определена |
|
Буфер передатчика пуст |
|||
|
U0ACR – автоматическое определение скорости |
|
|
|||||||||||||||||
11 |
10 |
|
9 |
|
|
8 |
7 |
4 |
3 |
2 |
|
|
|
1 |
|
0 |
|||
|
|
EO r |
|
O |
|
|
|
to |
t |
|
de |
|
|
t |
|||||
|
|
T |
lr |
|
|
u |
|
|
|
|
r |
||||||||
|
B |
|
l |
B |
|
|
|
A |
tar |
|
|
|
a |
||||||
|
A |
|
C |
A |
tC |
|
|
|
o |
t |
|||||||||
|
|
Int |
|
In |
|
|
|
S |
|
|
M |
|
|
S |
|
|
|||
|
Сброс флагов |
Автоматический повтор |
|
|
|
|
|
|
|
|
Запуск |
||||||||
|
|
|
|
|
|
|
|
|
|||||||||||
|
прерываний |
|
|
|
|
|
Режим |
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рисунок 1.19.2 – Схема регистров управления приемопередатчиками UART0
Регистры U0DLL, U0DLM задают делитель частоты, определяя битовую скорость приемопередатчика. См. выражения (1.19.1, 1.19.2).
Регистр U0FDR задает делитель частоты для точной настройки.
●Биты 0–3 (DivAddVal) — см. выражения (1.19.1, 1.19.2).
●Биты 4–7 (MulVal) — см. выражения (1.19.1, 1.19.2).
82
Таблица 1.19.1 – Оптимальные по точности настройки скорости UART
|
|
|
|
МГц |
|
|
|
МГц |
|
|
|
|
МГц |
|||
Стандартная скорость |
U0DLL |
U0DLM |
MulVal |
DivAddVal |
Отн. погр. скорости, % |
U0DLL |
U0DLM |
MulVal |
DivAddVal |
Отн. погр. скорости, % |
U0DLL |
U0DLM |
MulVal |
DivAddVal |
|
Отн. погр. скорости, % |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2400 |
226 |
4 |
4 |
1 |
0 |
113 |
2 |
4 |
1 |
0 |
23 |
1 |
5 |
2 |
|
0,006 |
4800 |
113 |
2 |
4 |
1 |
0 |
23 |
1 |
5 |
2 |
0,006 |
93 |
0 |
10 |
11 |
|
0,006 |
9600 |
23 |
1 |
5 |
2 |
0,006 |
93 |
0 |
10 |
11 |
0,006 |
71 |
0 |
8 |
3 |
|
0,032 |
19200 |
93 |
0 |
10 |
11 |
0,006 |
71 |
0 |
8 |
3 |
0,032 |
38 |
0 |
7 |
2 |
|
0,059 |
38400 |
71 |
0 |
8 |
3 |
0,032 |
38 |
0 |
7 |
2 |
0,059 |
19 |
0 |
7 |
2 |
|
0,059 |
57600 |
31 |
0 |
10 |
11 |
0,006 |
19 |
0 |
7 |
5 |
0,059 |
12 |
0 |
14 |
5 |
|
0,059 |
|
Битовая скорость определяется выражением |
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
; |
(1.19.1) |
или (что то же самое)
, (1.19.2)
где ; ; ; .
При настройке допустимое рассогласование скоростей приемника и передатчика составляет 5%.
В таблице 1.19.1 приведены оптимальные значения величин, задающих скорость приемопередатчика для тактовых частот равных 60, 30 и 15 МГц, которые могут быть получены с кварцевым резонатором 12 МГц.
Приняв , практически при любой частоте кварцевого резонатора можно получить рассогласование не более 2%. Тогда упрощенный расчет можно проводить по формуле
, |
(1.19.3) |
где обозначают 16-разрядный код, разбитый на два байта. Заметим, что нередко в системах передачи данных используют квар-
цевый резонатор с частотой 11,0592 МГц, которая делится нацело на все стандартные скорости RS-232. При этом в большинстве случаев погрешность задания частоты отсутствует при .
Регистр U0FCR предназначен для управления буфером-очередью.
● Бит 0 (FIFO Enable). Запись единицы включает буферы приемника и передатчика, а также открывает доступ к остальным битам регистра. Для работы приемопередатчика бит должен быть равен единице. Изменение бита сбрасывает буферы.
83
●Бит 1 (RX FIFO Reset). Запись единицы приводит к очистке буфера приемника, после чего бит автоматически будет сброшен в ноль.
●Бит 2 (TX FIFO Reset). Запись единицы приводит к очистке буфера передатчика. Бит также сбрасывается в ноль автоматически.
●Биты 6–7 (RX Trigger Level) — порог буфера. Определяют число принятых байт, при котором вырабатывается прерывание (см. таблицу 1.19.2). Биты должны быть установлены до включения прерывания.
Таблица 1.19.2 – Пороговое значение буфера приемника
RX Trigger Level |
Число приятных байт, вызывающих прерывание |
00 |
1 |
01 |
4 |
10 |
8 |
11 |
14 |
Регистр U0LCR — регистр управления линией.
●Биты 0–1 (World Length Select) выбирают разрядность передаваемых
ипринимаемых символов (см. таблицу 1.19.3).
Таблица 1.19.3 – Настройка числа принимаемых и передаваемых бит
World Length Select |
Число принимаемых и передаваемых бит |
00 |
5 |
01 |
6 |
10 |
7 |
11 |
8 |
●Биты 4–5 (Parity Select). Настройка контроля четности (в соответствии с таблицей 1.19.4).
●Бит 2 (Stop Bit Select). Нулевое значение соответствует одному стоповому биту, единица — двум стоповым битам.
Таблица 1.19.4 – Настройка контроля четности
Parity Select |
Настройка бита честности |
00 |
Число двоичных единиц в символе нечетно |
01 |
Число двоичных единиц в символе четно |
10 |
Бит четности всегда равен 1 |
11 |
Бит четности всегда равен 0 |
●Бит 3 (Parity Enable). Установка в единицу приводит к формированию бита четности при передаче и контролю четности при приеме.
●Бит 6 (Break Control). Запись единицы приводит к установке логического нуля на выходе передатчика TxD. Низкий уровень на линии TxD будет удерживаться пока этот бит равен единице.
●Бит 7 (DLAB). Установка единицы открывает доступ к регистрам настройки скорости (см. выше).
Регистр U0LSR индицирует состояние линии.
84
●Бит 0 (RDR). Единица показывает, что буфер приемника содержит принятые данные, готовые для считывания через U0RBR. Бит сбрасывается в ноль, когда буфер опустеет.
●Бит 1 (OE). Единица устанавливается в случае переполнения буфера приемника, то есть поступлении более 16 символов подряд без извлечения данных из U0RBR. Бит сбрасывается в ноль при чтении регистра U0LSR.
●Бит 2 (PE). Единица обозначает возникновение ошибки контроля четности. Значение бита относится к самому «старому» символу в буфереочереди. При извлечении очередного символа буфер сдвигается, и флаг PE обновляется для очередного символа. Бит сбрасывается при чтении U0LSR.
●Бит 3 (FE). Единица показывает, что стоповый бит распознан как логический ноль. При возникновении такой ошибки приемник будет пытаться восстановить синхронизацию, считая стоповый бит пропущенным, а нулевой уровень стартовым битом следующего символа. Значение бита также относится к очередному символу в буфере, обновляется при чтении U0RBR и сбрасывается в ноль при чтении U0LSR.
●Бит 4 (BI). Устанавливается в единицу, если на протяжении всего символа состояние линии RXD0 неизменно и равно логическому нулю. Чтение U0LSR сбрасывает бит в ноль.
●Бит 5 (THRE). Единица показывает, что буфер передатчика пуст и готов принимать данные через U0THR. При записи в U0THR бит сбрасывается в ноль.
●Бит 6 (TEMT). Единица показывает, что свободны и буфер передатчика, и сдвиговый регистр передатчика. То есть в настоящий момент передатчик простаивает. Ноль устанавливается, если в буфере или в сдвиговом регистре появляются данные.
●Бит 7 (RXFE). Устанавливается в единицу, если в любой из ячеек буфера имеется символ приятный с ошибкой (FE, PE или BI). Бит сбрасывается в ноль при чтении U0LSR при условии все байты, хранящиеся в буфере, приняты без ошибок.
Регистр U0ACR — управление автоматической настройкой скорости.
●Бит 0 (Start). Установка в единицу запускает процедуру автоматического определения скорости. По завершении бит автоматически будет сброшен в ноль.
●Бит 1 (Mode). Режим 0 (скорость определяется по стартовому биту и младшему биту данных) или режим 1 (скорость определяется только по стартовому биту).
●Бит 2 (Auto Restart). Установка единицы приводит к автоматическому перезапуску процедуры в случае неудачи.
●Бит 8 (ABEOIntClr). Запись единицы сбросит соответствующий флаг запроса прерывания в регистре U0IIR. Запись нуля не имеет значения.
●Бит 9 (ABTOIntClr). Запись единицы сбросит соответствующий флаг запроса прерывания в регистре U0IIR. Запись нуля не имеет значения.
Регистр U0TER предназначен для запрета передачи. Содержит единственный управляющий бит.
85
●Бит 7 (TXEN). По умолчанию бит равен единице. Запись нуля запрещает работу передатчика. Если бит сброшен в ноль во время передачи, то она будет завершена, но следующий символ из буфера передаваться не будет до тех пор, пока биту не будет присвоена единица.
Регистр U0IER предназначен для включения прерываний, связанных
ссобытиями в модуле UART0.
●Бит 0 (RBR) разрешает формирование запроса прерывания при наличии данных в буфере приемника, которые не были считаны через U0RBR.
●Бит 1 (THREE) разрешает запрос прерывания при опустошении буфера передатчика.
●Бит 2 (RX Line Status) разрешает прерывание при обнаружении ошибки (OE, PE, FE, BI) в ходе прима данных. Подробней об ошибках см. описание регистра U0LSR.
●Бит 8 (ABTO Int En) разрешает запрос прерывания по успешному завершению процедуры автоматического определения скорости.
●Бит 8 (ABEO Int En) разрешает запрос прерывания по неудачному завершению процедуры определения скорости.
Регистр U0IIR — идентификатор прерываний UART0. Все прерывающие события, священные с модулем UART0 считаются относящимися к одному источнику. Поэтому требуется алгоритмически определять причину прерывания с помощью следующих битов.
●Бит 0 (Interrupt Pending) Равенство единице показывает, что ни одно из прерываний не запрошено.
●Биты 1–3 (Interrupt Identification) содержат идентификатор прерывания в соответствии с таблицей 1.19.5.
Таблица 1.19.5 – Идентификация прерываний приемопередатчика UART
U0IIR[0–3] |
Значение |
Условие сброса в ноль |
0001 |
Прерывание не запрошено |
— |
0110 |
Ошибка в ходе приема |
Чтение U0LSR |
|
(биты OE, PE, FE, BI в U0LSR) |
|
|
|
|
0100 |
Буфер приемника полон |
Чтение U0RBR или число байт, |
|
в буфере, становится порога |
|
|
|
|
1100 |
Буфер частично заполнен и |
Чтение U0RBR |
|
приемник простаивает |
|
|
|
|
0010 |
Буфер передатчика пуст |
Чтение U0IIR или запись |
|
в регистр THR |
|
|
|
●Бит 6–7 (FIFO Enable) Эти биты повторяют бит 0 регистра U0FCR.
●Бит 8 (ABEO Int). Единица показывает, что процедура автоматического определения скорости завершена успешно.
●Бит 9 (ABTO Int). Единица показывает, скорость не удалось определить автоматически.
Здесь необходимо дать некоторые пояснения. Идентификаторы 0100 и 1100 свидетельствуют о наличии необработанных данных в буфере приемника. Различие состоит в том, что код 0100 устанавливается, когда число байт в
86