Программирование ARM STM32: контроллер LCD-TFT (LTDC) Sat, March 28 2020  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

STM32: контроллер LCD-TFT (LTDC) Печать
Добавил(а) microsin   

Контроллер дисплея LCD-TFT (аббревиатура расшифровывается как Liquid Crystal Display - Thin Film Transistor) предоставляет параллельный цифровой интерфейс RGB (Red, Green, Blue), выходные сигналы горизонтальной, вертикальной синхронизации, тактов точек (Pixel Clock) и разрешения данных (Data Enable). Это составляет интерфейс для прямого подключения к разнообразным панелям экранов LCD и TFT.

Вся прелесть этого контроллера в том, что он практически полностью освобождает вычислительные ресурсы микроконтроллера от процесса передачи данных в аппаратуру индикатора. Программа только лишь должна рисовать картинку в памяти, все остальное берет на себя контроллер LTDC. Причем это работает даже при активном отладчике, когда программа остановлена. Можно под управлением отладчика (в IAR это делается в дампе hex-дампа Memory) вручную отредактировать область памяти, и изменения немедленно отобразятся на экране (даже когда процессор остановлен).

Примечание: приведенная здесь информация это перевод раздела "16. LCD-TFT controller (LTDC)" даташита [1]. Она относится только к микроконтроллерам серий STM32F429xx и STM32F439xx.

[Общее описание LTDC]

• 24-битный параллельный вывод точек RGB, 8 бит на точку (RGB888).
• 2 слоя отображения, каждый с выделенным FIFO (64x32 бит).
• Таблица преобразования цвета (Color Look-Up Table, CLUT) на 256 цветов (256x24 бит), по одной на каждый слой.
• Поддержка разрешений до XGA (1024x768).
• Программируемый тайминг для поддержки различных панелей экранов.
• Программируемый цвет фона (Background color)
• Программируемая полярность для сигналов HSync, VSync и Data Enable.
• До 8 входных цветовых форматов, которые выбираются индивидуально для кадого слоя:
   – ARGB8888
   – RGB888
   – RGB565
   – ARGB1555
   – ARGB4444
   – L8 (8-бит Luminance или CLUT)
   – AL44 (4-бит alpha + 4-бит luminance)
   – AL88 (8-бит alpha + 8-бит luminance)
• Псевдослучайный дизеринг вывода для младших бит каждого канала.
   – Ширина дизеринга 2 бита для Red, Green, Blue.
• Гибкое наложение между двумя слоями с использованием альфа-значения (на точку или константа).
• Цветовая заливка (Color Keying, цвет прозрачности).
• Программируемые позиция и размер окна.
• Есть поддержка цветовых дисплеев TFT.
• Интерфейс AHB master с пакетной передачей (burst) 16 слов.
• До 4 программируемых событий прерывания.

Примечание: дизеринг, дитеринг (англ. dither от английского didderen — дрожать) — подмешивание в первичный сигнал псевдослучайного шума со специально подобранным спектром. В компьютерной графике дизеринг используется для создания иллюзии глубины цвета для изображений с относительно небольшим количеством цветов в палитре. Отсутствующие цвета составляются из имеющихся путём их «перемешивания». Например, если необходимо получить отсутствующий в палитре фиолетовый цвет, его можно получить, разместив красные и синие пиксели в шахматном порядке; оранжевый цвет может быть составлен из красных и желтых точек (из Википедии).

LTDC block diagram fig81

Рис. 81. Блок-схема LTDC.

Примечания:

1. Layer FIFO: один FIFO 64x32 бита на каждый слой.
2. PFC: Pixel Format Convertor (преобразователь формата точки), преобразует в слова данные выбранного формата точки.
3. Интерфейс AHB: для перемещения данных из памяти в FIFO.
4. Информацию о блоке смешивания (Blending), блоке дизеринга (Dithering) и генераторе тайминга (Timings Generator) см. ниже в соответствующих секциях.

Сброс и тактирование LTDC. Контроллер LCD-TFT использует 3 домена тактирования:

• AHB clock domain (HCLK), используется для быстрого перемещения данных в Layer FIFO и регистр конфигурации буфера кадра.
• APB2 clock domain (PCLK2), используется для регистра глобальной конфигурации и регистров прерываний.
• Pixel Clock domain (LCD_CLK), используется для генерации сигналов интерфейса LCD-TFT, генерации данных пикселов и конфигурации слоя. Выход LCD_CLK должен быть сконфигурирован в соответствии с требованиями используемой панели. LCD_CLK конфигурируется через PLLSAI (см. раздел RCC [1]).

Домен тактов для каждого регистра.

Таблица 88. Домен тактов, используемый для каждого регистра.

Регистр LTDC Домен тактов
LTDC_LxCR HCLK (частота ядра CPU)
LTDC_LxCFBAR
LTDC_LxCFBLR
LTDC_LxCFBLNR
LTDC_SRCR PCLK2 (частота тактов периферийных устройств)
LTDC_IER
LTDC_ISR
LTDC_ICR
LTDC_SSCR Pixel Clock (LCD_CLK, тактирование вывода графики)
LTDC_BPCR
LTDC_AWCR
LTDC_TWCR
LTDC_GCR
LTDC_BCCR
LTDC_LIPCR
LTDC_CPSR
LTDC_CDSR
LTDC_LxWHPCR
LTDC_LxWVPCR
LTDC_LxCKCR
LTDC_LxPFCR
LTDC_LxCACR
LTDC_LxDCCR
LTDC_LxBFCR
LTDC_LxCLUTWR

Следует обратить особое внимание на доступ к регистрам LTDC, потому что шина APB2 приостанавливается, когда выполняются следующие операции:

• Доступ на запись в регистр и обновление для 6xPCKL2 периодов + 5xLCD_CLK периодов (5x HCLK периодов для регистра в домене тактов AHB).
• Доступ на чтение для 7xPCKL2 периодов + 5xLCD_CLK периодов (5x периодов HCLK для регистра в домене тактов AHB).

Для регистров в домене тактов PCLK2 шина APB2 приостанавливается во время доступа на запись на период 6xPCKL2 и на период 7xPCKL2 во время доступа на чтение.

Контроллер LCD можно сбросить установкой соответствующего бита в регистре RCC_APB2RSTR. Это сбросит 3 домена тактов.

Выводы и сигналы интерфейса LTDC. В таблице 89 суммарно показан интерфейс LTDC.

Таблица 89. Сигнальный интерфейс LCD-TFT.

Сигналы LCD-TFT I/O Описание
LTDC_LxCR O Clock Output (тактирование панели LCD)
LCD_HSYNC O Horizontal Synchronization (HSYNC, синхроимпульсы строк)
LCD_VSYNC O Vertical Synchronization (VSYNC, синхроимпульсы кадров)
LCD_DE O Not Data Enable (сигнал разрешения данных)
LCD_R[7:0] O Red Data (8-битное значение уровня красного)
LCD_G[7:0] O Green Data (8-битное значение уровня зеленого)
LCD_B[7:0] O Blue Data (8-битное значение уровня синего)

Примечание: I/O обозначает направление сигналов, O это выход (Output).

Выводы контроллера LCD-TFT должны быть сконфигурированы в приложении пользователя. Не используемые выводы можно использовать для других целей (например как GPIO).

Для выходов LTDC в режиме до 24 бит (RGB888), если для вывода используется меньше чем 8 бит на точку (например RGB565 или RGB666 для интерфейса с 16-битными или 18-битными дисплеями), то сигналы данных RGB дисплея должны подключаться к MSB разрядам данных RGB контроллера LCD-TFT. Например, в случае подключения контроллера LCD-TFT к 16-битному дисплею RGB565, сигналы данных LCD R[4:0], G[5:0] и B[4:0] должны быть подключены к контроллеру LCD-TFT через LCD_R[7:3], LCD_G[7:2] и LCD_B[7:3].

[Программируемые параметры LTDC]

Контроллер LCD-TFT предоставляет гибко конфигурируемые параметры. Они должны быть разрешены или запрещены через регистр LTDC_GCR.

Тайминг синхронизации. На рис. 82 показаны конфигурируемые параметры сигналов, генерируемые блоком Synchronous Timings Generator (показан на схеме рис. 81). Он генерирует сигналы горизонтальной и вертикальной синхронизации панели, сигналы Pixel Clock и Data Enable.

LTDC LCD TFT synchronous timings fig82

Рис. 82. Тайминг сигналов синхронизации LCD-TFT.

Примечание: HBP и HFP соответственно обозначают периоды обратного и прямого хода по горизонтали (Horizontal Back Porch и Horizontal Front Porch). VBP и VFP соответственно обозначают периоды обратного и прямого хода по вертикали (Vertical Back Porch и Vertical Front Porch). Насколько я понял, Back Porch и Back Porch обозначают пустые поля вокруг активной области экрана. Т. е. HFP и HBP обозначают поля активной области слева и справа (по горизонтали), а VFP и VBP обозначают поля активной области сверху и снизу (по вертикали).

Программируется тайминг следующих сигналов синхронизации:

– Ширина импульсов HSYNC и VSYNC: импульсы горизонтальной и вертикальной синхронизации, конфигурируемые значением HSYNC Width - 1 и VSYNC Width - 1 в регистре LTDC_SSCR.
– HBP и VBP: ширина периодов обратного хода по горизонтали и вертикали, конфигурируется программированием накопленного значения HSYNC Width + HBP - 1 и накопленного значения VSYNC Width + VBP - 1 в регистре LTDC_BPCR.
– Active Width и Active Height: активная ширина и активная высота, программируется накопленным значением HSYNC Width + HBP + Active Width - 1 и накопленным значением VSYNC Width + VBP + Active Height - 1 в регистре LTDC_AWCR (поддерживаются режимы разрешения только до 1024x768).
– Total Width: общая ширина, программируется накопленным значением HSYNC Width + HBP + Active Width + HFP - 1 в регистре LTDC_TWCR. Здесь HFP это период Horizontal Front Porch.
– Total Height: общая высота, программируется накопленным значением VSYNC Height + VBP + Active Height + VFP - 1 в регистре LTDC_TWCR. Здесь VFP это период Vertical Front Porch.

Когда LTDC разрешен, генерация тайминга начинается с позиции X/Y=0/0 на первом горизонтальном пикселе синхронизации position, в области вертикальной синхронизации и последующим back porch, области активного отображения данных и front porch.

Когда LTDC запрещен, блок генерации тайминга сбрасывается в X=Total Width - 1, Y=Total Height - 1 и удерживает последний пиксель перед фазой вертикальной синхронизации, буфер FIFO сбрасывается (flush). Таким образом, постоянно выводятся только данные черного поля (blanking data).

Тайминг панели TFT-LCD (эти данные должны быть получены из даташита панели):

• Ширина горизонтальной и вертикальной синхронизации: 0x8 пикселей и 0x4 строки.
• Back porch по горизонтали и вертикали: 0x7 пикселей и 0x2 строки.
• Active Width и Active Height: 0x280 пикселей, 0x1E0 строк (640x480).
• Horizontal Front Porch: 0x6 пикселей.
• Vertical Front Porch: 0x2 строки.

Значения, программируемые в регистры:

• LTDC_SSCR = 0x00070003, здесь HSW[11:0] = 0x7 и VSH[10:0] = 0x3.
• LTDC_BPCR = 0x000E0005, здесь AHBP[11:0] = 0xE (0x8 + 0x6) и AVBP[10:0] = 0x5 (0x4 + 0x1).
• LTDC_AWCR = 0x028E01E5, здесь AAW[11:0] = 0x28E (0x8 +0x7 +0x27F) и AAH[10:0] = 0x1E5 (0x4 +0x2 + 0x1DF).
• LTDC_TWCR = 0x00000294, здесь TOTALW[11:0] = 0x294 (0x8 +0x7 +0x280 + 0x5).
• LTDC_THCR = 0x000001E7, здесь TOTALH[10:0] = 0x1E7 (0x4 +0x2 + 0x1E0 + 1).

Полярность сигналов. Сигналы горизонтальной и вертикальной синхронизации, Data Enable и Pixel Clock могут быть запрограммированы для активного высокого или низкого уровня с помощью регистра LTDC_GCR.

Background Color. Постоянный цвет фона (background color, RGB888) может быть запрограммирован регистром LTDC_BCCR. Он используется для смешивания с нижним слоем.

Дизеринг. Техника псевдослучайного дизеринга применяется в LFSR (Linear Feedback Shift Register, регистр сдвига с линейной обратной связью), чтобы добавить небольшое случайное значение (порог) к значению каждого цветового канала точки (R, G или B), что в некоторых случаях округляет MSB, когда отображаются 24-битные данные на 18-битном экране. Таким образом, техника дизеринга используется для округления данных, которые отличаются от одного кадра к другому.

Техника псевдослучайного дизеринга аналогична сравнению LSB с пороговым значением, и добавлению 1 к MSB только если часть LSB ≥ значению порога. LSB обычно отбрасываются, когда применяется дизеринг.

Ширина добавляемого псевдослучайного значения составляет 2 бита на каждый цветовой канал: 2 бита для R, 2 для G и 2 для B.

Как только контроллер LCD-TFT разрешен, LFSR начинает работать на первом активном пикселе, и продолжает работать, даже во время периодов гашения, и когда дизеринг выключен. Если LTDC запрещен, LFSR сбрасывается.

Дизеринг может включаться и выключаться на лету через регистр LTDC_GCR.

Перезагрузка теневых регистров. Для некоторых регистров конфигурации применяется теневой буфер (shadow register). Значения теневых регистров можно перезагрузить немедленно в активные регистры, когда осуществляется запись в эти регистры, или в начале вертикального периода гашения, в соответствии с конфигурацией в регистре LTDC_SRCR. Если выбран вариант немедленной перезагрузки, то перезагрузка должна быть активирована только после записи всех обновляемых регистров.

Теневые регистры не должны модифицироваться повторно до того, как завершится перезагрузка. Чтение из теневых регистров вернет действительное активное значение. Новое записанное значение может прочитано только после завершения перезагрузки.

Может быть разрешено прерывание перезагрузки путем программирования регистра LTDC_IER.

У слоев Layer 1 и Layer 2 все регистры теневые, кроме регистра LTDC_LxCLUTWR.

Генерация события прерывания. Генерация прерываний подробно описана в разделе "Прерывания LTDC".

[Программируемые параметры слоя]

Может быть разрешено до 2 слоев, они разрешаются, запрещаются и конфигурируются индивидуально. Отображение слоев фиксировано, они отображаются один за другим, снизу вверх. Если разрешены 2 слоя, то слой Layer2 отображается сверху.

Окно. Каждый слой может позиционироваться в определенном месте на активной области экрана, и у слоя может быть изменен размер, в результате слой соответствует окну на экране. Позиция окна и её размер конфигурируются как X/Y позиции слева-вверху и справа-внизу, с помощью внутреннего генератора синхронизации, который учитывает размеры обрамляющего поля и активную область отображения данных. Подробнее см. описание регистров LTDC_LxWHPCR и LTDC_WVPCR.

Программируемая позиция слоя и его размер определяют первый и последний видимый пиксель строки и первую и последнюю линию окна. Это позволяет отображать картинку либо в полный экран, либо только часть кадра экрана, см. рис. 83.

• Первый и последний видимый пиксель слоя устанавливается конфигурированием битовых полей WHSTPOS[11:0] и WHSPPOS[11:0] в регистре LTDC_LxWHPCR.
• Первая и последняя видимая строка пикселей слоя устанавливается конфигурированием битовых полей WVSTPOS[10:0] и WVSPPOS[10:0] в регистре LTDC_LxWVPCR.

LTDC Layer window programmable parameters fig83

Рис. 83. Программируемые параметры окна слоя.

Входной формат пикселя. Программируемый формат пикселя используется для сохранения данных в буфере кадра слоя.

Существует до 8 входных форматов пикселя. Для каждого слоя можно сконфигурировать формат через регистр LTDC_LxPFCR.

Данные пикселя считываются из буфера кадра и затем преобразуются во внутренний формат 8888 (ARGB) следующим образом: компоненты, у которых разрядность меньше 8, расширяются до 8 путем репликации бит. Выбранный диапазон бит сливается несколько раз до тех пор, пока он не достигнет разрядности 8 бит или более. Из полученного вектора берутся 8 старшиих разрядов (MSB). Пример: 5 бит красного канала формата RGB565, позиции бит 43210, реплицируются в позиции бит 43210432 (три LSB заполняются тремя MSB от исходных 5 бит).

В таблице 90 показано отображение данных пикселя в зависимости от выбранного формата.

Таблица 90. Преобразование формата данных пикселя во внутренний формат 8888 (ARGB).

ARGB8888
@+3
Ax[7:0]
@+2
Rx[7:0]
@+1
Gx[7:0]
@
Bx[7:0]
@+7
Ax+1[7:0]
@+6
Rx+1[7:0]
@+5
Gx+1[7:0]
@+4
Bx+1[7:0]
RGB888
@+3
Bx[7:0]
@+2
Rx[7:0]
@+1
Gx[7:0]
@
Bx[7:0]
@+7
Gx+1[7:0]
@+6
Bx+1[7:0]
@+5
Rx+1[7:0]
@+4
Gx+1[7:0]
RGB565
@+3
Rx+1[4:0]Gx+1[5:3]
@+2
Gx+1[2:0]Bx+1[4:0]
@+1
Rx[4:0]Gx[5:3]
@
Gx[2:0]Bx[4:0]
@+7
Rx+3[4:0]Gx+3[5:3]
@+6
Gx+3[2:0]Bx+3[4:0]
@+5
Rx+2[4:0]Gx+2[5:3]
@+4
Gx+2[2:0]Bx+2[4:0]
ARGB1555
@+3
Ax+1[0]Rx+1[4:0]Gx+1[4:3]
@+2
Gx+1[2:0]Bx+1[4:0]
@+1
Ax[0]Rx[4:0]Gx[4:3]
@
Gx[2:0]Bx[4:0]
@+7
Ax+3[0]Rx+3[4:0]Gx+3[4:3]
@+6
Gx+3[2:0]Bx+3[4:0]
@+5
Ax+2[0]Rx+2[4:0]Gx+2[4:3]
@+4
Gx+2[2:0]Bx+2[4:0]
ARGB4444
@+3
Ax+1[3:0]Rx+1[3:0]
@+2
Gx+1[3:0]Bx+1[3:0]
@+1
Ax[3:0]Rx[3:0]
@
Gx[3:0]Bx[3:0]
@+7
Ax+3[3:0]Rx+3[3:0]
@+6
Gx+3[3:0]Bx+3[3:0]
@+5
Ax+2[3:0]Rx+2[3:0]
@+4
Gx+2[3:0]Bx+2[3:0]
L8
@+3
Lx+3[7:0]
@+2
Lx+2[7:0]
@+1
Lx+1[7:0]
@
Lx[7:0]
@+7
Lx+7[7:0]
@+6
Lx+6[7:0]
@+5
Lx+5[7:0]
@+4
Lx+4[7:0]
AL44
@+3
Ax+3[3:0] Lx+3[3:0]
@+2
Ax+2[3:0] Lx+2[3:0]
@+1
Ax+1[3:0] Lx+1[3:0]
@
Ax[3:0] Lx[3:0]
@+7
Ax+7[3:0] Lx+7[3:0]
@+6
Ax+6[3:0] Lx+6[3:0]
@+5
Ax+5[3:0] Lx+5[3:0]
@+4
Ax+4[3:0] Lx+4[3:0]
AL88
@+3
Ax+1[7:0]
@+2
Lx+1[7:0]
@+1
Ax[7:0]
@
Lx[7:0]
@+7
Ax+3[7:0]
@+6
Lx+3[7:0]
@+5
Ax+2[7:0]
@+4
Lx+2[7:0]

Таблица преобразования цветов (CLUT). CLUT (Color Look-Up Table, таблица палитры) может быть разрешена во время работы программы (run-time) для каждого слоя через регистр LTDC_LxCR. Это может быть полезным в случае индексированного цвета, когда используется входной формат пикселя L8, AL44 и AL88.

Сначала в CLUT должны быть загружены значения R, G и B, которые заменят оригинальные значения пикселя R, G, B (indexed color). Каждый цвет (значение RGB) имеет свой собственный адрес, который является позицией внутри CLUT.

Значения R, G и B, и их собственный соответствующий адрес программируются через регистр LTDC_LxCLUTWR.

• В случае входного формата пикселя L8 и AL88 таблица CLUT загружается 256 цветами. Адрес каждого цвета конфигурируется битами CLUTADD в регистре LTDC_LxCLUTWR.
• В случае входного формата пикселя AL44 таблица CLUT загружается только 16 цветами. Адрес каждого цвета должен быть заполнен реплицированием 4 бит канала L в 8 бит следующим образом:

– L0 (индексированный цвет 0), по адресу 0x00
– L1, по адресу 0x11
– L2, по адресу 0x22
– ...
– L15, по адресу 0xFF.

Адрес буфера цветного кадра. Каждый буфер имеет начальный адрес цветового буфера (Color Frame Buffer Address, CFBA), который конфигурируется через регистр LTDC_LxCFBAR. Когда слой разрешен, данные будут выбираться автоматически из этого буфера кадра.

Длина буфера кадра. У каждого буфера есть настройка общей длины строки в байтах для буфера кадра, и настройка количества строк в буфере фрейма, что конфигурируется в регистрах LTDC_LxCFBLR и LTDC_LxCFBLNR соответственно. Эти настройки определяют размер буфера кадра (Color Frame Buffer Length).

Настройки длины строки и количества строк используются для остановки выборки данных в FIFO слоя на конце буфера кадра.

• Если настроено меньше байт, чем требуется, то генерируется прерывание недогрузки (FIFO underrun interrupt), если оно разрешено.
• Если настроено больше байт, чем требуется, то бесполезные данные, прочитанные из FIFO, отбрасываются. Бесполезные данные не отображаются.

Шаг буфера кадра. У каждого слоя есть конфигурируемый шаг для цветового буфера (Color Frame Buffer Pitch), который задает дистанцию между началом одной строки и началом другой строки в байтах. Это конфигурируется через регистр LTDC_LxCFBLR.

Смешивание слоев (Layer Blending). Смешивание всегда активно, и 2 слоя могут быть смешаны в соответствии с коэффициентами смешивания (blending factors), программируемыми в регистре LTDC_LxBFCR.

Порядок смешивания фиксирован, снизу вверх. Если разрешено 2 слоя, то сначала смешивается Layer1 с цветом фона (Background color), затем Layer2 смешивается с результатом смешения цветов Layer1 и фона, см. рис. 84.

LTDC Blending two layers with background fig84

Рис. 84. Принцип смешивания слоев и фона при отображении картинки.

Цвет по умолчанию. У каждого слоя есть цвет по умолчанию (default color) в формате ARGB, который используется вне определенного слоя окна, или когда слой запрещен. Цвет по умолчанию конфигурируется регистром LTDC_LxDCCR.

Смешивание всегда выполняется между двумя слоями, даже когда слой запрещен. Чтобы избежать отображения цвета по умолчанию, когда слой запрещен, установите коэффициенты смешивания этого запрещенного слоя в их значение после сброса (коэффициенты смешивания устанавливаются в регистре LTDC_LxBFCR).

Color Keying (цветовая прозрачность). Код цвета (RGB) может быть сконфигурирован для прозрачного пикселя. Если функция Color Keying разрешена, то текущие пиксели (после преобразования формата и перед смешиванием) сравниваются со значением color key. Если было совпадение с запрограммированным значением RGB, то все каналы (ARGB) этого пикселя устанавливаются в 0.

Значение Color Key может быть сконфигурировано и использовано на лету, во время выполнения кода для замены значения RGB пикселя. Функция Color Keying разрешается в регистре LTDC_LxCKCR.

[Прерывания LTDC]

LTDC предоставляет 4 маскируемых прерывания, объединяемых логическим ИЛИ в 2 вектора прерывания. Источники прерывания могут быть разрешены или запрещены индивидуально через регистр LTDC_IER. Установка соответствующего бита маски в 1 разрешает прерывание.

2 прерывания генерируются при следующих событиях:

• Прерывание строки (Line interrupt): генерируется, когда сканирование отображения достигло запрограммированной строки. Позиция прерывания программируется в регистре LTDC_LIPCR.
• Прерывание перезагрузки регистра (Register Reload interrupt): генерируется, когда была выполнена перезагрузка теневых регистров во время периода вертикального периода гашения.
• Прерывание недогрузки (FIFO Underrun interrupt): генерируется, когда запрошен пиксель из пустого FIFO слоя.
• Ошибка транзакции (Transfer Error interrupt): генерируется, когда произошла ошибка шины AHB при перемещении данных.

Эти прерывания направляются в контроллер NVIC, как показано на рисунке ниже.

LTDC Interrupt events fig85

Рис. 85. События прерывания.

Таблица 91. Запросы прерываний LTDC.

Прерывание Флаг Бит разрешения
Line (сканирование дошло до указанной строки) LIF LIE
Register Reload (перезагрузка теневых регистров в действующие) RRIF RRIE
FIFO Underrun (недогрузка буфера графики) FUDERRIF FUDERRIE
Transfer Error (ошибка транзакции по шине) TERRIF TERRIE

[Процедура программирования LTDC]

• Разрешите тактирование LTDC в регистре RCC.
• Сконфигурируйте требуемую частоту тактирования пикселей (Pixel Clock) в соответствии с даташитом панели.
• Сконфигурируйте тайминг синхроимпульсов: VSYNC, HSYNC, импульсы VBP и HBP (Vertical Back Porch и Horizontal Back Porch), область активных данных и тайминги передних полей (front porch) в соответствии с даташитом панели, как это описано выше в разделе "Программируемые параметры LTDC".
• Сконфигурируйте полярность синхроимпульсов и тактов в регистре LTDC_GCR.
• Если это необходимо, сконфигурируйте цвет фона (background color) в регистре LTDC_BCCR.
• Сконфигурируйте необходимые прерывания в регистрах LTDC_IER и LTDC_LIPCR.
• Сконфигурируйте параметры слоев Layer1 и Layer2:
   – Горизонтальная и вертикальная позиция окна слоя в регистрах LTDC_LxWHPCR и LTDC_WVPCR. Окно слоя должно находиться в активной области данных.
   – Входной формат пикселя в регистре LTDC_LxPFCR.
   – Начальный адрес буфера кадра (color frame buffer) в регистре LTDC_LxCFBAR.
   – Длина строки (line length) и шаг строки (line pitch) в буфере кадра, через регистр LTDC_LxCFBLR.
   – Количество строк буфера кадра в регистре LTDC_LxCFBLNR.
   – Если необходимо, загрузка в CLUT значений RGB, и её адреса в регистр LTDC_LxCLUTWR.
   – Если необходимо, конфигурирование цвета по умолчанию (default color) и коэффициентов смешивания слоев в регистрах LTDC_LxDCCR и LTDC_LxBFCR соответственно.
• Разрешите слои Layer1 и/или Layer2, и если необходимо, то примените CLUT с помощью регистра LTDC_LxCR.
• Если необходимо, разрешите дизеринг и color keying в регистрах LTDC_GCR и LTDC_LxCKCR соответственно. Это также можно делать на лету, во время работы контроллера.
• Перезагрузите теневые регистры в активные регистры через регистр LTDC_SRCR.
• Разрешите контроллер LCD-TFT в регистре LTDC_GCR.
• Все параметры слоя можно изменять на лету, кроме CLUT. Новая конфигурация либо перезагружается немедленно, либо во время периода вертикального гашения, это выбирается через регистр LTDC_SRCR.

Примечание: все регистры слоев теневые. Как только регистр записан, он не должен модифицироваться снова, пока не будет выполнена перезагрузка записанного значения в активный регистр. Таким образом, новая запись в тот же самый регистр отменит предыдущую конфигурацию, которая не была пока перезагружена.

[Регистры LTDC]

Все указанные смещения адреса регистров указаны относительно базового адреса контроллера LTDC. Например, для микроконтроллера STM32F429 базовый адрес 0x40016800 (LTDC_BASE, константа в файле stm32f429xx.h).

В следующей таблице суммарно показаны регистры LTDC.

LTDC register map and reset values tbl92

В этом регистре определяется количество горизонтальных пикселей синхронизации минус 1, и количество вертикальных строк синхронизации минус 1. См. выше рис. 82 и раздел "Программируемые параметры LTDC", где приведен пример программирования параметров синхронизации.

Смещение адреса: 0x08
Значение сброса: 0x00000000

   31      30       29       28       27       26       25       24       23       22       21       20       19       18       17       16   
зарезервировано
HSW[11:0]
rw

   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
зарезервировано
VSH[10:0]
rw

Биты 31:28 зарезервированы, и должны находиться в состоянии сброса (все нули).

HSW[11:0] (биты 27:16): длительность импульса горизонтальной синхронизации (Horizontal Synchronization Width) в единицах длительности точки. Эти биты определяют количество пикселей горизонтальной синхронизации минус 1.

Биты 15:11 зарезервированы, и должны находиться в состоянии сброса (все нули).

VSH[10:0] (биты 10:0) длительность импульса вертикальной синхронизации (Vertical Synchronization Height) в единицах строк горизонтального сканирования. Эти биты определяют высоту вертикальной синхронизации минус 1. Они представляют количество горизонтальных линий синхронизации.

Этот регистр определяет накопленное количество пикселей горизонтальной синхронизации и пикселей заднего поля (back porch) минус 1 (HSYNC Width + HBP - 1), и накопленное количество строк вертикальной синхронизации и линий заднего поля минус 1 (VSYNC Height + VBP - 1). См. выше рис. 82 и раздел "Программируемые параметры LTDC", где приведен пример программирования параметров конфигурации.

Смещение адреса: 0x0C
Значение сброса: 0x00000000

   31      30       29       28       27       26       25       24       23       22       21       20       19       18       17       16   
зарезервировано
AHBP[11:0]
rw

   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
зарезервировано
AVBP[10:0]
rw

Биты 31:28 зарезервированы, и должны находиться в состоянии сброса (все нули).

AHBP[11:0] (биты 27:16): накопленное количество горизонтального заднего поля (Accumulated Horizontal back porch) в единицах периода точки. Эти биты определяют ширину Accumulated Horizontal back porch, которая включает точки горизонтальной синхронизации (Horizontal Synchronization) и точки горизонтального заднего поля (Horizontal back porch) минус 1. Горизонтальное заднее поле это период между моментом, когда горизонтальная синхронизация переходит в неактивное состояние, и моментом, когда начинается отображение активной части следующей линии сканирования экрана.

Биты 15:11 зарезервированы, и должны находиться в состоянии сброса (все нули).

AVBP[10:0] (биты 10:0): накопленное количество вертикальных линий заднего поля (Accumulated Vertical back porch) в единицах горизонтальных линий сканирования. Эти биты определяют ширину accumulated Vertical back porch, которая включает вертикальную синхронизацию (Vertical Synchronization) и строки вертикального заднего поля (Vertical back porch) минус 1. Вертикальное заднее поле это количество горизонтальных линий сканирования от начала кадра до начала первой активной линии сканирования следующего кадра.

Этот регистр определяет накопленное количество пикселей горизонтальной синхронизации (Horizontal Synchronization), пикселей заднего поля (back porch) и количество активных пикселей минус 1 (HSYNC width + HBP + Active Width - 1), и накопленное количество строк вертикальной синхронизации (Vertical Synchronization), строк заднего поля (back porch) и активных строк минус 1 (VSYNC Height+ BVBP + Active Height - 1). См. выше рис. 82 и раздел "Программируемые параметры LTDC", где приведен пример программирования параметров конфигурации.

Смещение адреса: 0x10
Значение сброса: 0x00000000

   31      30       29       28       27       26       25       24       23       22       21       20       19       18       17       16   
зарезервировано
AAW[11:0]
rw

   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
зарезервировано
AAH[10:0]
rw

Биты 31:28 зарезервированы, и должны находиться в состоянии сброса (все нули).

AAW[11:0] (биты 27:16): Accumulated Active Width (в единицах периодов тактов точки). Эти биты определяют накопленную активную ширину (Accumulated Active Width), которая включает периоды Horizontal Synchronization, Horizontal back porch и Active pixels минус 1. Active Width это количество точек в активной области графики экрана на строке сканирования. Максимальная поддерживаемая активная ширина равна 0x400 (соответствует ширине графической области экрана 1024 точки).

Биты 15:11 зарезервированы, и должны находиться в состоянии сброса (все нули).

AAH[10:0] (биты 10:0): Accumulated Active Height (в единицах горизонтальных линий сканирования). Эти биты определяют накопленную высоту (Accumulated Height), которая включает количество строк вертикальной синхронизацию (Vertical Synchronization), вертикального заднего поля (Vertical back porch) и активную высоту в строках (Active Height) минус 1. Активная высота это количество строк в активной области графики экрана по вертикали. Максимальная поддерживаемая активная высота равна 0x300 (соответствует высоте графической области экрана 768 точек).

Этот регистр определяет накопленное количество точек горизонтальной синхронизации (Horizontal Synchronization), заднего поля (back porch), активной области и переднего поля (Horizontal front porch) минус 1 (HSYNC Width + HBP + Active Width + HFP - 1), и накопленное количество вертикальной строк синхронизации (Vertical Synchronization), строк заднего поля (back porch lines), строк активной области и строк переднего поля (Vertical front porch) минус 1 (VSYNC Height + BVBP + Active Height + VFP - 1). См. выше рис. 82 и раздел "Программируемые параметры LTDC", где приведен пример программирования параметров конфигурации.

Смещение адреса: 0x14
Значение сброса: 0x00000000

   31      30       29       28       27       26       25       24       23       22       21       20       19       18       17       16   
зарезервировано
TOTALW[11:0]
rw

   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
зарезервировано
TOTALH[10:0]
rw

Биты 31:28 зарезервированы, и должны находиться в состоянии сброса (все нули).

TOTALW[11:0] (биты 27:16): Total Width (в единицах периода тактов точки). Эти биты определяют накопленную общую ширину в точках (Total Width), которая включает периоды Horizontal Synchronization, Horizontal back porch, Active Width и Horizontal front porch минус 1.

Биты 15:11 зарезервированы, и должны находиться в состоянии сброса (все нули).

TOTALH[10:0] (биты 10:0): Total Height (в единицах горизонтальных строк сканирования). Эти биты определяют накопленную общую высоту в строках (Total Height), которая включает интервалы строк Vertical Synchronization, Vertical back porch, Active Height и Vertical front porch минус 1.

Этот регистр определяет глобальную конфигурацию контроллера LCD-TFT.

Смещение адреса: 0x18
Значение сброса: 0x00002220

   31      30       29       28       27       26       25       24       23       22       21       20       19       18       17       16   
HSPOL
rw
VSPOL
rw
DEPOL
rw
PCPOL
rw
AAW[11:0]
rw

зарезервировано DEN
rw
   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
зарез.
DRW[2:0]
r
зарез. DGW[2:0]
r

зарез. DBW[2:0]
r
зарезервировано LTDCEN
rw

HSPOL (бит 31): Horizontal Synchronization POLarity, полярность горизонтальной синхронизации. Этот бит устанавливается и очищается программой.

0: активный уровень лог. 0 (по умолчанию).
1: активный уровень лог. 1.

VSPOL (бит 30): Vertical Synchronization POLarity, полярность вертикальной синхронизации. Этот бит устанавливается и очищается программой.

0: активный уровень лог. 0 (по умолчанию).
1: активный уровень лог. 1.

DEPOL (бит 29): Data Enable POLarity, полярность разрешения данных. Этот бит устанавливается и очищается программой.

0: активный уровень лог. 0 (по умолчанию).
1: активный уровень лог. 1.

PCPOL (бит 28): Pixel Clock POLarity, полярность тактов пикселов. Этот бит устанавливается и очищается программой.

0: входная тактовая частота пикселей (по умолчанию).
1: инвертированная входная тактовая частота пикселей.

Биты 27:17 зарезервированы, и должны находиться в состоянии сброса (все нули).

DEN (бит 16): Dither ENable, разрешение дизеринга. Этот бит устанавливается и очищается программой.

0: дизеринг запрещен (по умолчанию).
1: дизеринг разрешен.

Бит 15 зарезервирован, и должен находится в состоянии сброса (0).

DRW[2:0] (биты 14:12): Dither Red Width, количество бит дизеринга канала красного цвета. По умолчанию 2.

Бит 11 зарезервирован, и должен находится в состоянии сброса (0).

DGW[2:0] (биты 10:8): Dither Green Width, количество бит дизеринга канала зеленого цвета. По умолчанию 2.

Бит 7 зарезервирован, и должен находится в состоянии сброса (0).

DBW[2:0] (биты 6:4): Dither Blue Width, количество бит дизеринга канала синего цвета. По умолчанию 2.

Биты 3:1 зарезервированы, и должны находиться в состоянии сброса (все нули).

LTDCEN (бит 0): бит разрешения контроллера LCD-TFT. Этот бит устанавливается и очищается программой.

0: LTDC запрещен (по умолчанию).
1: LTDC разрешен.

Этот регистр позволяет выбрать либо перезагружать теневые регистры немедленно (они перезагружаются в активные регистры), либо во время вертикального периода гашения. Все регистры слоев Layer1 и Layer2 имеют затенение, кроме регистров LTDC_L1CLUTWR и LTDC_L2CLUTWR.

Смещение адреса: 0x24
Значение сброса: 0x00000000

   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   
зарезервировано
VBR
rw
IMR
rw

Биты 31:2 зарезервированы, и должны находиться в состоянии сброса (все нули).

VBR (бит 1): Vertical Blanking Reload. Этот бит устанавливается программой и очищается только аппаратно, после выполненной перезагрузки (он не может быть очищен путем записи в регистр, как только он установлен).

0: никакого эффекта.
1: теневые регистры перезагружаются во время периода вертикального гашения (в начале первой строки после отображения активной области экрана, Active Display Area).

IMR (бит 0): Immediate Reload. Этот бит устанавливается программой и очищается только аппаратно, после выполненной перезагрузки.

0: никакого эффекта.
1: немедленно произойдет перезагрузка теневых регистров в активные регистры.

Примечание: теневые регистры при чтении возвратят активные значения. Пока не будет выполнена перезагрузка, будет считываться "старое" значение.

Этот регистр определяет цвет фона (RGB888).

Смещение адреса: 0x2C
Значение сброса: 0x00000000

   31      30       29       28       27       26       25       24       23       22       21       20       19       18       17       16   
зарезервировано
BCRED[7:0]
rw
   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
BCGREEN[7:0]
rw
BCBLUE[7:0]
rw

Биты 31:24 зарезервированы, и должны находиться в состоянии сброса (все нули).

BCRED[7:0] (биты 23:16): Background Color RED, эти биты конфигурируют значение красной составляющей цвета фона.

BCGREEN[7:0] (биты 15:8): Background Color GREEN, эти биты конфигурируют значение зеленой составляющей цвета фона.

BCBLUE[7:0] (биты 7:0): Background Color BLUE, эти биты конфигурируют значение синей составляющей цвета фона.

Этот регистр определяет, какие флаги статуса генерируют запрос прерывания, если соответствующий бит установлен в 1.

Смещение адреса: 0x34
Значение сброса: 0x00000000

   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   
зарезервировано
RRIE
rw
TERRIE
rw
FUIE
rw
LIE
rw

Биты 31:4 зарезервированы, и должны находиться в состоянии сброса (все нули).

RRIE (бит 3): Register Reload Interrupt Enable, разрешение прерывания в момент перезагрузки теневых регистров. Этот бит устанавливается и очищается программой.

0: прерывание запрещено (по умолчанию).
1: прерывание разрешено.

TERRIE (бит 2): Transfer Error Interrupt Enable, разрешение прерывания при ошибке транзакции. Этот бит устанавливается и очищается программой.

0: прерывание запрещено (по умолчанию).
1: прерывание разрешено.

FUIE (бит 1): FIFO Underrun Interrupt Enable, разрешение прерывания при недогрузке FIFO строки. Этот бит устанавливается и очищается программой.

0: прерывание запрещено (по умолчанию).
1: прерывание разрешено.

LIE (бит 0): Line Interrupt Enable, разрешение прерывания строки. Этот бит устанавливается и очищается программой.

0: прерывание запрещено (по умолчанию).
1: прерывание разрешено.

Регистр возвращает значение флагов состояния прерываний.

Смещение адреса: 0x38
Значение сброса: 0x00000000

   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   
зарезервировано
RRIF
r
TERRIF
r
FUIF
r
LIF
r

Биты 31:4 зарезервированы, и должны находиться в состоянии сброса (все нули).

RRIF (бит 3): Register Reload Interrupt Flag.

0: не было события перезагрузки теневых регистров.
1: было событие перезагрузки теневых регистров во время периода вертикального гашения (и достигнута первая строка после активной области экрана).

TERRIF (бит 2): Transfer Error Interrupt Flag.

0: не было события ошибки транзакции.
1: была ошибка при передаче данных по шине.

FUIF (бит 1): FFIFO Underrun Interrupt Flag.

0: не было события недогрузки FIFO.
1: была недогрузка FIFO, если FIFO одного из слоев пуст, и была попытка чтения из него данных пикселя.

LIF (бит 0): Line Interrupt Flag.

0: не было прерывания строки.
1: произошло прерывание, когда сканирование достигло запрограммированной строки.

Смещение адреса: 0x3C
Значение сброса: 0x00000000

   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   
зарезервировано
CRRIF
w
CTERRIF
w
CFUIF
w
CLIF
w

Биты 31:4 зарезервированы, и должны находиться в состоянии сброса (все нули).

CRRIF (бит 3): Clears Register Reload Interrupt Flag, бит для очистки флага перезагрузки теневых регистров.

0: никакого эффекта.
1: очистит флаг RRIF в регистре LTDC_ISR.

CTERRIF (бит 2): Clears the Transfer Error Interrupt Flag, бит для очистки флага ошибки транзакции.

0: никакого эффекта.
1: очистит флаг TERRIF в регистре LTDC_ISR.

CFUIF (бит 1): Clears the FIFO Underrun Interrupt flag, бит для очистки флага недогрузки FIFO.

0: никакого эффекта.
1: очистит флаг FUDERRIF в регистре LTDC_ISR.

CLIF (бит 0): Clears the Line Interrupt Flag, бит для очистки флага прерывания строки.

0: никакого эффекта.
1: очистит флаг LIF в регистре LTDC_ISR.

Этот регистр определяет позицию прерывания строки. Программируемое значение для строки зависит от параметров тайминга. См. рис. 82.

Смещение адреса: 0x40
Значение сброса: 0x00000000

   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   
зарезервировано
LIPOS[10:0]
rw

Биты 31:4 зарезервированы, и должны находиться в состоянии сброса (все нули).

LIPOS[10:0] (биты 10:0): Line Interrupt POSition, позиция строки для генерации прерывания.

Смещение адреса: 0x44
Значение сброса: 0x00000000

   31      30       29       28       27       26       25       24       23       22       21       20       19       18       17       16   
CXPOS[15:0]
r
   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
CYPOS[15:0]
r

CXPOS[15:0] (биты 31:16): Current X POSition, текущая позиция сканирования X.

CYPOS[15:0] (биты 15:0): Current Y Position, текущая позиция сканирования Y.

Этот регистр возвратит статус текущей фазы дисплея, которая управляется сигналами HSYNC, VSYNC и Horizontal/Vertical DE.

Например: если текущая фаза дисплея это вертикальная синхронизация, то бит VSYNCS установится (активный уровень лог. 1). Если текущая фаза дисплея это горизонтальная синхронизация, то установится бит HSYNCS.

Смещение адреса: 0x48
Значение сброса: 0x0000000F

   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   
зарезервировано
HSYNCS
r
VSYNCS
r
HDES
r
VDES
r

Биты 31:4 зарезервированы, и должны находиться в состоянии сброса (все нули).

HSYNCS (бит 3): Horizontal SYNChronization display Status, состояние горизонтальной синхронизации дисплея.

0: сигнал не активен.
1: сигнал активен.

VSYNCS (бит 2): Vertical SYNChronization display Status, состояние вертикальной синхронизации дисплея.

0: сигнал не активен.
1: сигнал активен.

HDES (бит 1): Horizontal Data Enable display Status, состояние сигнала разрешения по горизонтали дисплея.

0: сигнал не активен.
1: сигнал активен.

VDES (бит 0): Vertical Data Enable display Status, состояние сигнала разрешения по вертикали дисплея.

0: сигнал не активен.
1: сигнал активен.

Примечание: возвращенный статус не зависит от сконфигурированной полярности в сигналов в регистре LTDC_GCR, вместо этого будет возвращено текущее состояние активной фазы дисплея.

[Регистры программирования слоев LTDC]

Ниже во врезках приведено описание регистров, управляющих слоями. В именах регистров маленькая буква x обозначает номер слоя 1 или 2. В реальных вызовах функций вместо x подставляется этот символ.

Смещение адреса: 0x84 + 0x80 x (Layerx - 1), здесь Layerx = 1 или 2.
Значение сброса: 0x00000000

   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   
зарезервировано
CLUTEN
rw
зарезерв. COLKEN
rw
LEN
rw

Биты 31:5 зарезервированы, и должны находиться в состоянии сброса (все нули).

CLUTEN (бит 4): Color Look-Up Table ENable, разрешение использования таблицы преобразования цветов (палитры). Этот бит устанавливается и очищается программой.

0: таблица CLUT запрещена (по умолчанию).
1: таблица CLUT разрешена.

CLUT имеет значение только для форматов пикселя L8, AL44 и AL88. Подробнее см. выше секцию "Таблица преобразования цветов (CLUT)".

Биты 3:2 зарезервированы, и должны находиться в состоянии сброса (все нули).

COLKEN (бит 1): COLor Keying ENable, разрешение цвета прозрачности. Этот бит устанавливается и очищается программой.

0: функция Color Keying запрещена (по умолчанию).
1: функция Color Keying разрешена.

LEN (бит 0): Layer ENable, разрешение слоя. Этот бит устанавливается и очищается программой.

0: слой запрещен (по умолчанию).
1: слой разрешен.

Этот регистр определяет горизонтальное положение (Horizontal Position, первый и последний пиксель) окна слоя 1 или 2. Первый видимый пиксель строки программируется значением поля бит AHBP[10:0] + 1 в регистре LTDC_BPCR. Последний видимый пиксель строки программируется значением поля бит AAW[10:0] в регистре LTDC_AWCR.

Смещение адреса: 0x88 + 0x80 x (Layerx - 1), здесь Layerx = 1 или 2.
Значение сброса: 0x00000000

   31      30       29       28       27       26       25       24       23       22       21       20       19       18       17       16   
зарезервировано
WHSPPOS[11:0]
rw
   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
зарезервировано
WHSTPOS[11:0]
rw

Биты 31:28 зарезервированы, и должны находиться в состоянии сброса (все нули).

WHSPPOS[11:0] (биты 27:16): Window Horizontal StoP POSition. Эти биты конфигурируют последний видимый пиксель строки окна слоя. Должно соблюдаться следующее условие:

WHSPPOS[11:0] ≥ AHBP[10:0] + 1 (биты AHBP[10:0] программируются в регистре LTDC_BPCR)

Биты 15:12 зарезервированы, и должны находиться в состоянии сброса (все нули).

WHSTPOS[11:0] (биты 11:0): Window Horizontal STart POSition. Эти биты конфигурируют первый видимый пиксель строки окна слоя. Должно соблюдаться следующее условие:

WHSTPOS[11:0] ≤ AAW[10:0] (биты AAW[10:0] программируются в регистре LTDC_AWCR).

Пример: регистр LTDC_BPCR сконфигурирован значением 0x000E0005(биты AHBP[11:0] равны 0xE), и регистр значением 0x028E01E5 (биты AAW[11:0] равны 0x28E). Чтобы сконфигурировать горизонтальное положение окна размером 630x460, начальное горизонтальное смещение составит 5 пикселей в активной области данных.

1. Первый пиксель окна слоя: поле WHSTPOS[11:0] должно быть запрограммировано в значение 0x14 (0xE +1 + 0x5).
2. Последний пиксель окна слоя: поле WHSPPOS[11:0] должно быть запрограммировано в значение 0x28A.

Этот регистр определяет вертикальное положение (первую и последнюю строку) окна слоя 1 или 2. Первая видимая строка кадра программируется значением поля бит AVBP[10:0] + 1 в регистре LTDC_BPCR. Последняя видимая строка кадра программируется значением поля бит AAH[10:0] в регистре LTDC_AWCR.

Смещение адреса: 0x8C + 0x80 x (Layerx - 1), здесь Layerx = 1 или 2.
Значение сброса: 0x00000000

   31      30       29       28       27       26       25       24       23       22       21       20       19       18       17       16   
зарезервировано
WVSPPOS[10:0]
rw
   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
зарезервировано
WVSTPOS[10:0]
rw

Биты 31:27 зарезервированы, и должны находиться в состоянии сброса (все нули).

WVSPPOS[10:0] (биты 26:16): Window Vertical Stop Position. Эти биты конфигурируют последнюю видимую строку окна слоя. Должно соблюдаться следующее условие:

WHSPPOS[11:0] ≥ AVBP[10:0] + 1 (биты AVBP[10:0] программируются в регистре LTDC_BPCR).

Биты 15:11 зарезервированы, и должны находиться в состоянии сброса (все нули).

WVSTPOS[10:0] (биты 10:0): Window Vertical Start Position. Эти биты конфигурируют первую видимую строку окна слоя. Должно соблюдаться следующее условие:

WHSTPOS[11:0] ≤ AAH[10:0] (биты AAH[10:0] программируются в регистре LTDC_AWCR).

Пример: регистр LTDC_BPCR сконфигурирован значением 0x000E0005 (биты AVBP[10:0] равны 0x5), и регистр LTDC_AWCR значением 0x028E01E5 (биты AAH[10:0] равны 0x1E5). Для конфигурирования вертикального положения окна размера 630x460, с вертикальным начальным смещением 8 строк в области активных данных:

1. Первая строка окна слоя: поле WVSTPOS[10:0] должно быть запрограммировано значением 0xE (0x5 + 1 + 0x8).
2. Последняя строка окна слоя: поле WVSPPOS[10:0] должно быть запрограммировано значением 0x1DA.

Этот регистр определяет значение цвета прозрачности (color key RGB), которое используется функцией Color Keying.

Смещение адреса: 0x90 + 0x80 x (Layerx - 1), здесь Layerx = 1 или 2.
Значение сброса: 0x00000000

   31      30       29       28       27       26       25       24       23       22       21       20       19       18       17       16   
зарезервировано
CKRED[7:0]
rw
   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
CKGREEN[7:0]
rw

CKBLUE[7:0]
rw

Биты 31:24 зарезервированы, и должны находиться в состоянии сброса (все нули).

CKRED[7:0] (биты 23:16): Color Key RED, красная составляющая значения цвета прозрачности.

CKGREEN[7:0] (биты 15:8): Color Key GREEN, зеленая составляющая значения цвета прозрачности.

CKBLUE[7:0] (биты 7:0): Color Key BLUE, синяя составляющая значения цвета прозрачности.

Этот регистр определяет формат данных пикселя, используемый для сохранения в буфере кадра слоя. Данные пикселя автоматически считываются контроллером LTDC из буфера кадра, и затем преобразуются во внутренний формат 8888 (ARGB).

Смещение адреса: 0x94 + 0x80 x (Layerx - 1), здесь Layerx = 1 или 2.
Значение сброса: 0x00000000

   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   
зарезервировано
PF[2:0]
r
w

Биты 31:3 зарезервированы, и должны находиться в состоянии сброса (все нули).

PF[2:0] (биты 2:0): Pixel Format. Форматы кодируются следующим образом:

000: ARGB8888
001: RGB888
010: RGB565
011: ARGB1555
100: ARGB4444
101: L8, 8-бит Luminance (яркость)
110: AL44, 4 бита Alpha (прозрачность), 4 бита Luminance
111: AL88, 8 бит Alpha, 8 бит Luminance

Этот регистр определяет постоянное значение канала alpha (аппаратно поделенное на 255), которое используется для alpha-наложения. См. описание регистра LTDC_LxBFCR.

Смещение адреса: 0x98 + 0x80 x (Layerx - 1), здесь Layerx = 1 или 2.
Значение сброса: 0x000000FF

   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   
зарезервировано
CONSTA[7:0]
r
w

Биты 31:8 зарезервированы, и должны находиться в состоянии сброса (все нули).

CONSTA[7:0] (биты 7:0): CONSTant Alpha.

Пример: если запрограммированное значение Constant Alpha равно 0xFF, то действующее значение составит 255/255 = 1.

Примечание: alpha blending - техника создания эффекта полупрозрачности путём объединения исходного пикселя с пикселем, уже находящимся во фрейм-буфере. Каждому пикселю обычно ставятся в соответствие значения красного, зелёного и синего компонентов цвета (RGB). Если ставится в соответствие ещё и альфа-значение, то говорят, что пиксели имеют альфа-канал (компонент A) (из Википедии).

Этот регистр определяет цвет по умолчанию (default color) слоя в формате ARGB. Цвет по умолчанию используется вне заданного окна слоя, или когда слой запрещен. Значение сброса 0x00000000 определяет прозрачный черный цвет.

Смещение адреса: 0x9C + 0x80 x (Layerx - 1), здесь Layerx = 1 или 2.
Значение сброса: 0x00000000

   31      30       29       28       27       26       25       24       23       22       21       20       19       18       17       16   
DCALPHA[7:0]
rw
DCRED[7:0]
rw
   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
DCGREEN[7:0]
rw

DCBLUE[7:0]
rw

DCALPHA[7:0] (биты 31:24): Default Color ALPHA, эти биты конфигурируют значение по умолчанию канала alpha.

DCRED[7:0] (биты 23:16): Default Color RED, эти биты конфигурируют значение по умолчанию канала красного.

DCGREEN[7:0] (биты 15:8): Default Color GREEN, эти биты конфигурируют значение по умолчанию канала зеленого.

DCBLUE[7:0] (биты 7:0): Default Color BLUE, эти биты конфигурируют значение по умолчанию канала синего.

Этот регистр определяет коэффициенты смешивания F1 и F2. Общая формула смешивания: BC = BF1 x C + BF2 x Cs, где:

BC = Blended color, смешиваемый цвет
BF1 = Blend Factor 1, коэффициент смешивания 1
C = цвет текущего слоя
BF2 = Blend Factor 2, коэффициент смешивания 2
Cs = смешиваемый цвет нижележащих слоев

Смещение адреса: 0xA0 + 0x80 x (Layerx - 1), здесь Layerx = 1 или 2.
Значение сброса: 0x00000607

   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   
зарезервировано
BF1[2:0]
rw
зарезервировано BF2[2:0]
rw

Биты 31:11 зарезервированы, и должны находиться в состоянии сброса (все нули).

BF1[2:0] (биты 10:8): Blending Factor 1, эти биты выбирают коэффициент смешивания F1.

000 .. 011: зарезервировано
100: Constant Alpha
101: зарезервировано
110: Pixel Alpha x Constant Alpha
111: зарезервировано

Биты 7:3 зарезервированы, и должны находиться в состоянии сброса (все нули).

BF2[2:0] (биты 2:0): Blending Factor 2, эти биты выбирают коэффициент смешивания F2.

000 .. 100: зарезервировано
101: 1 - Constant Alpha
110: зарезервировано
111: 1 - (Pixel Alpha x Constant Alpha)

Примечание: значение Constant Alpha программируется значением в регистре LxCACR, которое аппаратно поделено на 255.

Пример: разрешен только слой 1, BF1 сконфигурирован для Constant Alpha, BF2 сконфигурирован для 1 - Constant Alpha. Constant Alpha: в регистре LxCACR запрограммировано значение 240 (0xF0). Таким образом, реальное значение Constant Alpha составит 240/255 = 0.94.

C: цвет текущего слоя 128
Cs: цвет фона 48

Layer1 смешивается с цветом фона.

BC = Constant Alpha x C + (1 - Constant Alpha) x Cs = 0.94 x 128 + (1 - 0.94) x 48 = 123.

Этот регистр определяет начальный адрес цветового буфера кадра. Он указывает на начало области памяти, где программа рисует графическую картинку. Левая верхняя точка экрана соответствует началу этого буфера, т. е. адресу, запрограммированному в регистр LTDC_LxCFBAR.

Смещение адреса: 0xAC + 0x80 x (Layerx - 1), здесь Layerx = 1 или 2.
Значение сброса: 0x00000000

   31      30       29       28       27       26       25       24       23       22       21       20       19       18       17       16   
CFBADD[31:16]
rw
   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
CFBADD[15:0]
rw

CFBADD[31:0] (биты 31:0): Color Frame Buffer Start ADDress.

Смещение адреса: 0xB0 + 0x80 x (Layerx - 1), здесь Layerx = 1 или 2.
Значение сброса: 0x00000000

   31      30       29       28       27       26       25       24       23       22       21       20       19       18       17       16   
зарезервировано
CFBP[12:0]
rw
   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
зарезервировано
CFBLL[12:0]
rw

Биты 31:29 зарезервированы, и должны находиться в состоянии сброса (все нули).

CFBP[12:0] (биты 28:16): Color Frame Buffer Pitch в байтах. Эти биты определяют шаг, который применяется при инкременте от начальной точки строки до начальной точки следующей строки.

Биты 15:13 зарезервированы, и должны находиться в состоянии сброса (все нули).

CFBLL[12:0] (биты 12:0): Color Frame Buffer Line Length. Эти биты определяют длину одной строки в байтах + 3. Длина строки вычисляется следующим образом: активная ширина (Active Width) x количество байт на точку + 3.

Примеры:

• У буфера кадра формат RGB565 (2 байта на точку) и ширина активной области 256 пикселей. Общее количество байт на строку составляет 256x2 = 512 байт (0x200), где pitch = длине строки требует записи в этот регистр значения 0x02000203.
• У буфера кадра формат RGB888 (3 байта на точку), и ширина активной области 320 пикселей. Общее количество байт на строку составляет 320x3 = 960 байт (0x3C0), 0x03C003C3.

Этот регистр определяет количество строк в цветовом буфере кадра.

Смещение адреса: 0xB4 + 0x80 x (Layerx - 1), здесь Layerx = 1 или 2.
Значение сброса: 0x00000000

   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   
зарезервировано
CFBLNBR[10:0]
rw

Биты 31:11 зарезервированы, и должны находиться в состоянии сброса (все нули).

CFBLNBR[10:0] (биты 10:0): Color Frame Buffer Line NumBeR. Эти биты определяют количество строк в буфере кадра, которое соответствуют активной области экрана.

Примечание: настройки количества строк и длины строки определяют, как данные будут выбираться из памяти кадра для каждого слоя. Если сконфигурировано меньше байт, чем необходимо, то будет сгенерировано прерывание недогрузки (FIFO underrun interrupt), если оно разрешено. С другой стороны, настройки начального адреса и шага (pitch) определяют корректные адреса начала графики каждой строки в памяти.

Этот регистр определяет адрес CLUT и значение RGB.

Смещение адреса: 0xB4 + 0x80 x (Layerx - 1), здесь Layerx = 1 или 2.
Значение сброса: 0x00000000

   31      30       29       28       27       26       25       24       23       22       21       20       19       18       17       16   
CLUTADD[7:0]
w
RED[7:0]
w
   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
GREEN[7:0]
w

BLUE[7:0]
w

CLUTADD[7:0] (биты 31:24): CLUT ADDress. Эти биты конфигурируют адрес таблицы преобразования цветов (позицию цвета в CLUT) каждого значения RGB.

RED[7:0] (биты 23:16): эти биты конфигурируют значение красного.

GREEN[7:0] (биты 15:8): эти биты конфигурируют значение зеленого.

BLUE[7:0] (биты 7:0): эти биты конфигурируют значение синего.

Примечание: запись в регистр CLUT должна осуществляться только во время периода гашения, или когда слой запрещен. CLUT может быть разрешена или запрещена через регистр LTDC_LxCR. CLUT работает только для формата пикселей L8, AL44 и AL88.

[Ссылки]

1. RM0090 Reference manual STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439 advanced Arm®-based 32-bit MCUs site:st.com.

 

Добавить комментарий


Защитный код
Обновить

Top of Page