При разработке устройства на базе ARM, которое должно отображать простую графику на цветном ЖК-дисплее, как лучше всего разрабатывать вещи, позволяющие выполнять быстрые обновления, желательно без привязки к конкретному поставщику ARM или LCD? В моем текущем проекте используется черно-белый дисплей, который может работать молниеносно с помощью порта SPI на PIC (перерисовка сложного дисплея за 1/60 секунды). Кажется, что обычные цветные ЖК-дисплеи имеют порт SPI, но даже заполнение 160x120 LCD сплошным цветом заняло бы 30 мс, а 320x240 потребовало бы 120 мс в лучшем случае (тактовая частота сдвига 10 МГц).
Если бы можно было сэкономить контакты контроллера, параллельный режим мог бы быть лучше, но я не знаю каких-либо независимых от семьи средств подключения параллельного интерфейса без необходимости трех отдельных инструкций хранения памяти для каждого пикселя (по одной для установки данных, один, чтобы установить высокий выходной тактовый сигнал, и один, чтобы установить низкий тактовый выход). У некоторых микросхем ARM есть интерфейсы шины памяти, но они часто хотят делать такие вещи, как мультиплексный адрес и данные, или выделять много выводов для вывода нерелевантных битов адреса (для ЖК-дисплея нужен только один бит адреса).
Если посмотреть на ILI9320 от ILITEK или HD66789 от Renesas, один из подходов, который может показаться интересным, - это использовать CPLD для преобразования SPI в параллельные данные и включить режим, который выводил бы пиксель на бит. Глядя на таблицу данных Renesas, можно было бы получить записи по пикселям на бит с минимальным аппаратным обеспечением (не требуется CPLD), заставив все биты данных параллельного порта отслеживать вывод последовательных данных, используя последовательный режим для всего, кроме пикселя записывает и использует функции сравнения / маски, чтобы либо пиксели со всеми нулями были прозрачными, а пиксели со всеми единицами устанавливали выбранные биты в GRAM, либо пиксели со всеми единицами были бы прозрачными, а пиксели со всеми нулями очищали бы выбранные биты. Раздел «Функции» в техническом описании IKITEK предполагает, что он имеет аналогичную функциональность, но регистр отображает
Предполагая, что код будет в основном отображать однотонный текст и графику, идеальным подходом, по-видимому, будет использование CPLD для сопряжения порта SPI ARM с параллельным портом дисплея и обеспечения возможности загрузки CPLD с цветами переднего плана / фона. Это было бы особенно хорошо, если бы у кого-то было средство записи «прозрачных» пикселей. Учитывая шрифт в виде двухцветного растрового изображения, можно просто загрузить данные шрифта непосредственно в порт SPI; это позволило бы показывать данные шрифта со скоростью один пиксель каждые два тактовых импульса ARM. С другой стороны, CPLD, достаточный для выполнения такой задачи управления отображением, будет стоить около 2 долларов.
Как лучше всего связать ARM с цветным ЖК-дисплеем, если цель состоит в том, чтобы в основном показывать однотонный текст или простую (например, 16-цветную или 64-цветную) графику?
редактировать
Я выполнил множество проектов ЖК-дисплеев со многими типами ЖК-дисплеев, включая ЖК-дисплеи с символьным режимом, пользовательские мультиплексированные сегменты 3: 1 на основе моего собственного метода привода, черно-белые графические ЖК-дисплеи со встроенными контроллерами и черно-белые дисплеи. -белые ЖК-дисплеи, для которых я разработал свой собственный контроллер на основе CPLD для взаимодействия с универсальным DMA микроконтроллера общего назначения (обеспечивая четкость даже в четырех уровнях). Я горжусь тем, что делаю показы быстрыми. Один из графических контроллеров был чем-то вроде собаки, которой требовалось около 1/10 секунды для полного обновления экрана даже при записи постоянных данных, но большинство моих дисплеев может воспроизводить даже довольно сложное изображение менее чем за 1/50 секунды.
Многие из проектов, которые я делаю, работают на батарейках, поэтому проблема тока - это проблема. Контроллер дисплея на основе DMA у меня работал хорошо, но это было для линейного проекта. Я считаю, что единственный способ получить разумное потребление тока от графического ЖК-дисплея - это использовать контроллер, который объединяет буфер дисплея и драйверы колонок. Посылка большого количества дисплея между чипами в каждом кадре будет тратить много энергии даже на дисплей с одним битом на пиксель; на цветном дисплее с шестнадцатью битами на пиксель это было бы намного хуже.
Я только начал смотреть на листы данных цветного LCD; похоже, что во многих дисплеях используется контроллер, аналогичный ILITEK ILI9320, хотя все таблицы данных, которые я нашел для контроллеров, основанных на этом общем проекте, были помечены как «предварительные». Некоторым нравится, что ILITEK one утверждает, что имеет функции маскировки и прозрачности, но не перечисляет никаких регистров для них; Я не знаю, есть ли у настоящих чипов такие функции, но «предварительные» таблицы данных не указали их, или они опускали функции, но забыли упомянуть их. Если на практике все такие чипы имеют функции прозрачности, кажется разумным разработать их; если нет, то нет.
Я ожидаю, что для большинства проектов типичный экран будет состоять из произвольно размещенного текста в умеренном количестве одноцветных шрифтов произвольного размера. Шрифты, скорее всего, будут храниться в виде битовых данных. При использовании Cortex-M3, если бы я хотел записать отображение с параллельными данными, «внутренний цикл» кода для записи двух пикселей, вероятно, закончился бы примерно так:
rol r0, r0, # 2; Получить один бит в C, другой в N ММСК strhcs r1, [r3, # DATA_OFS]; Написать данные strhcc r2, [r3, # DATA_OFS]; Написать данные strb r4, [r3, # CLOCK_SET_OFS]; Установите часы высоко strb r4, [r3, # CLOCK_CLR_OFS]; Установите низкие часы itmi strhmi r1, [r3, # DATA_OFS]; Написать данные strhpl r2, [r3, # DATA_OFS]; Написать данные strb r4, [r3, # CLOCK_SET_OFS]; Установите часы высоко strb r4, [r3, # CLOCK_CLR_OFS]; Установите низкие часы
Не самая быстрая вещь в мире. Устранение записи в инструкции установки / сброса часов поможет. Я полагаю, что нет хорошего независимого от архитектуры способа устранения обеих тактовых записей, но может быть довольно распространенный способ, который позволил бы устранить одну (например, многие микросхемы могут иметь счетчик / ШИМ, который может быть сделан для импульсного вывода кратко в ответ на одну операцию сохранения памяти).
Использование порта SPI и добавление оборудования для синхронизации одного пикселя на бит значительно ускорит доступ к дисплею. Если используется отображение без маскировки и прозрачности, CPLD должен будет включать счетчик адресов и для каждого пикселя либо синхронизировать слово данных пикселя, либо команду set-address для позиции следующего пикселя (для которой ему потребуется счетчик). ). В отличие от этого, если бы дисплей имел маскировку и прозрачность, все, что мне нужно было бы сделать, - это чтобы CPLD поддерживал режим, в котором после его синхронизации в 16 битов каждый дополнительный бит выводил бы слово данных на дисплей с LSB отслеживает вывод SDI (может даже не потребоваться использование CPLD - только несколько обычных логических чипов). Я бы установил цвет прозрачности на тот цвет, который я хочу написать, но с включенным LSB.
Я не хочу придумывать красивый дизайн, основанный на маскировке и прозрачности, а потом обнаруживать, что только у дисплеев с такими функциями время выполнения заказа составляет 30 недель. С другой стороны, если такие дисплеи будут и будут широко доступны у многих поставщиков, я не хочу, чтобы паранойя по поводу доступности заставляла меня использовать некачественный дизайн.