Управление индикацией
Скачать 1.95 Mb.
|
© МИРЭА, А.Н.Богаченков Алгоритм обработчика прерывания по флагу передачи Прерывания по флагу передачи разрешаются после подготовки передаваемого сообще- ния, обработчик вызывается сразу же для загрузки в регистр передачи первого байта. При записи в регистр передачи флаг передачи автоматически сбрасывается. Следующий вызов произойдет, как только данные начнут передаваться по каналу, и регистр передачи освобо- дится для следующего байта. Интерфейс с расширенными возможностями может иметь не одиночные регистры при- ема/передачи, а целые буферы для блоков данных (с организацией FIFO). Подробнее см. ма- териал лекций. Вход Возврат Выборка текущего кода из буфера и загрузка в регистр передачи Признак процесса передачи установлен да нет Возврат Декремент счетчика передаваемых кодов Все коды переданы да нет Возврат Сброс признака процесса передачи Запрет прерываний от интерфейса передачи 1 ЦУМП, Практические занятия, © МИРЭА, А.Н.Богаченков Цифровые устройства и микропроцессоры II часть Практические занятия Занятие 7 Программирование устройства ввода с клавиатуры ● Задача. Реализовать ввод символов с клавиатуры с числом клавиш не менее 80 и вы- вод символов на дисплей. Предусмотреть переключение регистра символов (строч- ные/прописные, цифры/знаки). Обеспечить защиту от дребезга. Устройство может использоваться для подготовки отправляемых по каналу связи со- общений, оформления информационных табло, ввода паролей и т.п. Функциональная схема устройства Клавиши объединены в матрицу из 8 строк и 10 столбцов. В такой схеме клавиши мо- гут нажиматься только по одной. Регистровая клавиша является независимой. Разряды порта B — входные, на них должны быть установлены подтягивающие резисторы. Один цикл опроса клавиатуры состоит в поочередном выставлении активных уровней на строках — разрядах PA0...PA7 и чтении состояния столбцов. Циклы повторяются непрерывно. Один из вариантов программного устранения дребезга — анализ результата за N последних циклов опроса, при совпадении результатов во всех этих циклах идентифицируется либо нажатие 2 ЦУМП, Практические занятия, © МИРЭА, А.Н.Богаченков определенной клавиши, либо отсутствие нажатия. В разрабатываемом алгоритме для просто- ты будет использоваться N = 2. Если перебор строк производить с периодичностью 1 мс, полное время опроса клавиатуры составит 16 мс. Результатом чтения кода с клавиатуры является значение в одной из стандартных ко- дировок (ASCII, Windows, Unicod и др.). Это значение помещается в специальный регистр кода клавиши, опрос которого будет производиться отдельной функцией, аналогичной функциям консольного ввода в компьютерных программах ( getch , getchar ). В компьютер- ном варианте функция не возвращает управления, пока клавиша не будет нажата. В нашем случае будет реализован механизм чтения кода без ожидания, если клавиша в момент вызова функции не нажата, возвращается значение -1. Сами коды клавиш определяются по номеру строки и номеру столбца, на пересечении которых находится клавиша, для этой цели удобно использовать два двумерных массива — основной и дополнительный, последний — если нажата регистровая клавиша ("Shift") . Исходя из прикладной задачи, в которой используется клавиатурный ввод, процесс опроса клавиатуры может быть организован как по системе прерываний (в случае, когда в любой момент требуется реакция на нажатие), так и единичным запуском данной процедуры. Для ввода и отображения текстовой строки в памяти создан символьный буфер — мас- сив размером с требуемой длиной вводимой строки. Каждый элемент массива хранит код символа (одно или двухбайтовый, в зависимости от кодировки), для очистки буфера и, соот- ветственно, дисплея в массив заносятся коды символа "пробел". Функция чтения кода клави- атуры должна возвращать код клавиши из регистра кода и тут же этот регистр очищать, что- бы при повторном вызове функции не идентифицировалось новое нажатие (если на самом деле не была нажата новая клавиша). Устройство отображения предметом детальной проработки в настоящем проекте не яв- ляется. На схеме показано наипростейшее сопряжение с символьным или графическим дис- плеем по интерфейсу I 2 C. В интерфейсе всего два сигнала и он медленный. Для символьного многострочного дисплея скорости хватает, а графический дисплей может быть применен только с низким разрешением (максимум 128 x 128 пикселей). Некоторые пояснения по алгоритму опроса. Пример диаграммы процесса представлен ниже. Подпрограмма вызывается с некоторой временной периодичностью, например, каждую миллисекунду. За один вызов опрашивается только одна строка. Код от столбцов при нажа- тии какой-то одной клавиши является унитарным (с одним активным уровнем), поэтому для Выбор строки 0 Выбор строки 1 Код столбца Выбор строки 7 Один цикл сканирования . . . 3 ЦУМП, Практические занятия, © МИРЭА, А.Н.Богаченков нахождения номера столбца необходимы дополнительные операции (реализация функции приоритетного шифратора). Один цикл опроса завершается после перебора всех строк, ре- зультатом его является "текущий" код нажатой в данный момент клавиши, сохраняемый да- лее как "предыдущий". Для всех последующих циклов "текущий" сравнивается с "предыду- щим" и только при их совпадении идентифицируется реальное нажатие клавиши. Но если клавиша остается нажатой, то для исключения повторной идентификации нового нажатия задействован флаг нажатия, который устанавливается при самом первом обнаружении нажа- той клавиши и не сбрасывается, пока клавиша не будет отпущена. Еще одна тонкость заложена в последовательности выбора строки и чтения состояния столбцов. Между этими событиями должна быть задержка на стабилизацию кода столбца (в клавиатурной матрице большие монтажные емкости и длинные дорожки). Эта задержка со- ответствует периоду вызова подпрограммы, в которой сначала производится операция чте- ния, и уже затем запись нового кода для выбора строки. Если в прикладной задаче не требуется постоянный опрос клавиатуры, то прерывания можно исключить, а приведенную подпрограмму при необходимости вызывать из основного потока, но поместив ее в программный цикл по числу строк и числу циклов опроса (в данном примере потребуется вызвать 16 раз). Не следует забывать о необходимости некоторой вре- менной задержки (см. предыдущий абзац). И еще один вариант обслуживания состоит в сохранении фонового процесса постоян- ного опроса по прерываниям (как в нашем случае), но при установке флага нажатия допол- нительно программно генерируется запрос прерывания, например, от некоего внешнего сиг- нала или другого источника (включая программные исключения ядра). В отдельном обра- ботчике прерывания уже реализуются необходимые действия в соответствии с введенным кодом клавиши. По такому принципу строится реакция на нажатие "горячих" клавиш в ком- пьютерных операционных системах. Доработки, предлагаемые для самостоятельной работы: 1. Проверка вводимых символов на некоторый разрешенный набор (например, запрет некоторых знаков, ввод только определенных символов или цифр, ввод чисел в заданном диапазоне и т.п.). 2. Использование курсора. 3. Задание произвольного числа циклов опроса. 4. Реализация автоповтора при удержании клавиши нажатой в течение некоторого вре- мени. 5. Звуковая индикация нажатия клавиш. 6. Сохранение текущего состояния ввода при сбросе. 4 ЦУМП, Практические занятия, © МИРЭА, А.Н.Богаченков Алгоритм основной программы Клавиша нажата Начало нет Вывод на дисплей начальной заставки Аппаратная инициализация: портов, дисплея, таймера, прерываний, сторожевого таймера. Программная инициализация: - очистка регистра кода клавиши, - сброс флага нажатия, - задание номера начального цикла опроса, - очистка (заполнение пробелами) символь- ного буфера Вызов функции чтения кода клавиатуры Клавиша Backspace Клавиша Enter Число симв. < макс. Вывод буфера на дисплей Выполнение действий в соответствии с выполняемой задачей Увеличение числа введенных символов, сдвижка символов в буфере влево, запись нового символа в правую позицию Уменьшение числа введенных символов, сдвижка символов в буфере вправо Режим сна Число симв. > 0 да нет нет (буфер заполнен) да да да да нет нет (буфер пуст) Обслуживание сторожевого таймера 5 ЦУМП, Практические занятия, © МИРЭА, А.Н.Богаченков Алгоритм подпрограммы опроса клавиатуры, вызывается по прерываниям от таймера Вход Выход Есть нажатие Определение кода клавиши по номерам строки, столбца и по состоянию клавиши Shift. Сохранение кода как текущего кода нажатой клавиши да нет Чтение состояния столбцов и клавиши Shift Строка последняя Цикл опроса Уст. признака 2-го цикла Уст. признака 1-го цикла Сравнение текущего и преды- дущего кодов клавиши Сохранение текущего кода как предыдущего Коды совпадают Запись кода в регистр кода нажатой клавиши, установка флага нажатия Очистка текущего кода клавиши (запись -1) Обнуление номера строки Определение выводимого кода по номеру строки. Вывод кода в порт Увеличение номера строки да нет 1-й 2-й да нет Флаг нажатия не установлен Сброс флага нажатия установлен Есть нажатие да нет 1 ЦУМП, Практические занятия, © МИРЭА, А.Н.Богаченков Цифровые устройства и микропроцессоры II часть Практические занятия Занятие 8 Графический интерфейс в микроконтроллерах Введение Занятие посвящено вопросам сопряжения микроконтроллера с графическим дисплеем, элементам программирования аппаратного и пользовательского интерфейсов. Номенклатура выпускаемых в настоящее время дисплеев обширна [1]. Наиболее распространенными явля- ется жидкокристаллические дисплеи с активной матрицей (TFT – thin-film transistor), панели на основе органических светодиодов (OLED). Непосредственно экран дисплея состоит из множества точек (пикселей), которыми управлять напрямую процессор не способен (рис. 1) [2]. Поэтому обслуживанием отдельных пикселей занимается специализированный аппаратный контроллер, а с процессором осу- ществляется связь посредством одного из стандартных интерфейсов. Для автономных мик- ропроцессорных систем (которые и являются предметом изучения в курсе) применяют дис- плеи ограниченного размера и разрешения — до 7 дюймов (редко до 10) и до 800 х 480 точек ( 0.4 мегапиксела). Рис. 1 Интерфейсы подключения Простейший вариант сопряжения был показан на предыдущем занятии — по интер- фейсу I 2 C (рис. 2). Главное достоинство этого варианта — минимальное число сигналов: так- товые импульсы и данные. А общеизвестный недостаток — низкая скорость, из-за чего в этой схеме могут использоваться дисплеи с относительно небольшим разрешением (наибо- лее распространены: от 64 х 32 точек до 128 х 128 точек). При стандартной скорости интер- фейса 400 кбит/с максимальная частота обновления для одноцветного дисплея 128 х 128 со- ставит около 20 кадров в секунду, для цветного — в 8...20 раз меньше. 2 ЦУМП, Практические занятия, © МИРЭА, А.Н.Богаченков Рис. 2 Гораздо большую скорость обеспечивает SPI. Большинство устройств с таким интер- фейсом могут работать на тактовых частотах до 10–20 МГц. Типичная схема подключения показана на рис. 3 [3]. Интерфейс SPI обычно применяется для работы с экранами разреше- нием до 320 x 240. Но для цветных дисплеев его скоростных возможностей не всегда хватает для быстрого вывода изображений. Рис. 3 Поэтому достаточно широко распространен параллельный 8- или 16-разрядный интер- фейс, который часто обозначают как Motorola 6800 или Intel 8080. Схема подключения пред- ставлена на рис. 4. Помимо данных D0...D15 в нем присутствуют стандартные для парал- лельного обмена сигналы выбора CS, чтения RD, записи WR, а также специальный сигнал RS для выбора передачи в дисплей команд или данных (в стандарте 6800 сигнал RD/WR один, но есть сигнал разрешения E). Такой параллельный интерфейс способен работать с па- нелями разрешением до 800 x 480, но вывод на них динамически меняющегося изображения все равно является затруднительным. Рис. 4 Более современной является еще одна разновидность параллельного интерфейса, но с раздельной передачей данных каждой цветовой составляющей, а также отдельными сигна- лами кадровой и строчной синхронизации — Parallel RGB (рис. 5) [3]. Рис. 5 3 ЦУМП, Практические занятия, © МИРЭА, А.Н.Богаченков Для непосредственного программного вывода через такой интерфейс требуются уже значительные вычислительные ресурсы. Поэтому в ряде модификаций микроконтроллеров он реализован аппаратно как встроенный периферийный модуль (LTDC — LCD-TFT Display Controller). Естественный недостаток параллельных интерфейсов — большое число сигналов, что вынуждает применять процессоры в корпусах с увеличенным числом выводов. В настоящее время приобретает популярность специализированный дисплейный интерфейс MIPI-DSI (Mobile Industry Processor Interface – Display Serial Interface). Схема сопряжения представлена на рис. 6 [3]. Рис. 6 Отличительной особенностью интерфейса являются дифференциальные линии переда- чи (как и во всех современных высокоскоростных интерфейсах — USB, Ethernet, LVDS, SATA и др.). Минимальное число пар в MIPI-DSI — две, одна для тактирования, другая для данных. Скорость передачи по одной паре доходит до 4.5 Гбит/с. Спецификация интерфейса позволяет наращивать число таких пар, тем самым увеличивая пропускную способность. Се- рийно выпускаемые фирмой STMicroelectronics модификации процессоров имеют 2 диффе- ренциальные пары, обеспечивающие скорости передачи данных 500–1000 Мбит/с. Дисплеи с повышенным разрешением (более 1 мегапикселов), в том числе мониторы компьютеров, телевизоров, как правило, не имеют встроенных контроллера и памяти, для связи с ними используется многоканальный LVDS интерфейс [4]. Подобный интерфейс при- сутствует только в отдельных модификациях микроконтроллеров, а также в сигнальных про- цессорах. Форматы представления пиксела изображения 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 R G B R G B R G B A R G B 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 бит. Монохромное изображение без града- ций яркости 8 бит. Черно-белое изображение с 256 града- циями яркости, цветное с индексированными цветами и др. 16 бит. Для яркости каждой цветовой состав- ляющей отведено 5 или 6 бит — номер бита 24 бита. Яркость каждой цветовой составляю- щей кодируется 8 битами 12 бит. Яркость (16 уровней) каждой цветовой составляющей кодируется 4 битами 32 бита. Яркость каждой цветовой составляю- щей кодируется 8 битами. Дополнительные 8 бит (alpha-канал) задают уровень прозрач- ности 4 ЦУМП, Практические занятия, © МИРЭА, А.Н.Богаченков При 8-битном представлении пиксела используются различные способы кодирования. Для черно-белого — это всегда уровень яркости (0..255), для цветного — возможно выделе- ние по 2–3 бита для каждого цвета. Вариант с индексированными цветами часто использует- ся в изображениях, где не требуется точная цветопередача с различными оттенками (напри- мер, деловая графика), при этом каждому значению кода (0..255) ставится в соответствие 16/24-битное представление цвета из отдельно загружаемой таблицы. 12-битное кодирование применяется в дисплеях среднего качества (как в лабораторном макете). Но оно не очень неудобно, так как пиксел занимает не целое число байт. 24-битное представление цвета ("True Color") широко используется в компьютерной и мобильной технике. Для специальных применений (художественных, полиграфических, измерительных) разрядность на канал (цвет) может составлять 10–16. С особенностями других кодировок предлагается ознакомиться самостоятельно по многочисленным материалам в Интернете. Буферная память Подавляющее большинство дисплеев со встроенными контроллерами имеют собствен- ную память, хранящую код для каждого пиксела. А иногда таких буферов может два и более. Каждый буфер отвечает за так называемый слой изображения. Один из вариантов их исполь- зования — "скрытное" рисование изображения в одном слое, пока на экране отображается другой, затем они быстро меняются ролями. Другой вариант — аппаратное объединение (микширование) изображений в разных слоях, например, неподвижного фона и движущегося объекта. Прямая запись в память, встроенную в дисплей, обычно используется при наличии низкоскоростных интерфейсов (I 2 C, SPI) и небольшой оперативной памяти процессора. Более скоростные интерфейсы, как уже отмечалось, не обслуживаются напрямую вы- числительным ядром, а функционируют в режиме прямого доступа к памяти. В этом случае графический буфер располагается на стороне процессора. Необходимый объем буферной памяти: для разрешения 320 x 240 — 75 Кбайт при 8- разрядном кодировании, 225 Кбайт при 24-разрядном, для разрешения 800 x 480 — 375 Кбайт при 8-разрядном кодировании, 1125 Кбайт при 24-разрядном. Указанные объемы для большинства микроконтроллеров являются значительными, например, в лабораторном макете в режиме прямого доступа может быть задействовано не более 128 Кбайт, а в самых лучших модификациях объем ОЗУ не превышает 1 Мбайта. По- этому графический буфер обычно располагается во внешней статической или динамической памяти (SRAM, SDRAM) — рис. 7. Рис. 7. Процессор Контроллер DMA Внешняя память (SDRAM) Вычислительное ядро Контроллер интерфейса дисплея (LTDC) Дисплей TFT 5 ЦУМП, Практические занятия, © МИРЭА, А.Н.Богаченков Графическая память всегда является одномерным массивом, порядок расположения элементов, как правило, соответствует последовательности пикселов на экране по строке слева направо и по столбцам сверху вниз, т.е. точка с координатами (0, 0) находится в левом верхнем углу графического поля. Для дисплеев с однобитовым представлением пикселов память использует побайтовую адресацию, но каждый байт управляет одновременно 8 пик- селами, располагающимися по вертикали, т.е. при выводе на дисплей последовательности байт рисуется сразу 8 пиксельных строк. |