Основная трудность с TFT панелью оказалась не в сопряжении всяких временных параметров (частоты pixel clock, количества пикселей на строку, количества строк, длительности импульсов вертикальной и горизонтальной синхронизации), чего я опасался, а в нахождении ошибок и заполнении пробелов в datasheet на контроллер TFT панели.
Про параметры:
В Радио-86РК частота pixel clock составляет 8 МГц (получается делением 16 МГц на два счетчиком D3), каждый символ занимает по горизонтали 6 пикселей (все тот же D3), а все остальное настраивается программно. Вот фрагмент Монитора:
ROM_MON:FACE push h
ROM_MON:FACF lxi h, 0C001h ; HL now points to 0xC001 (CCRT command/status register)
ROM_MON:FAD2 mvi m, 0 ; CCRT "Reset" command
ROM_MON:FAD4 dcx h ; HL now points to 0xC000 (CCRT parameter register)
ROM_MON:FAD5 mvi m, 4Dh ; ; normal (not spaced) rows, 78 chars per row (includng "border")
ROM_MON:FAD7 mvi m, 1Dh ; 1 row count per VRTC, 30 rows per frame (including "border")
ROM_MON:FAD9 mvi m, 99h ; ; 10 lines per character row, 10th line is the underline
ROM_MON:FADB mvi m, 93h ; ; line coouner offset by 1 line; transparent attribute field
ROM_MON:FADB ; cursor is blinking underline; 8 character counts per HRTC
ROM_MON:FADD inx h ; HL now points to 0xC001 (CCRT command/status register)
ROM_MON:FADE mvi m, 27h ; ; "Start Display" command;
ROM_MON:FADE ; 7 char clocks between DMA requests;
ROM_MON:FADE ; 8 DMA cycles per burst
ROM_MON:FAE0 mov a, m ; read CCRT status
ROM_MON:FAE1
ROM_MON:FAE1 loc_FAE1: ; CODE XREF: enable_screen+16j
ROM_MON:FAE1 mov a, m ; read CCRT status
ROM_MON:FAE2 ani 20h ; check for "Interrupt Request" flag
ROM_MON:FAE4 jz loc_FAE1 ; wait until CCRT generates an interrupt request flag
Видимая часть каждой строки по горизонтали состроит из 78 символов по 6 пикселей, итого 78 х 6 = 468 пикселей. Длительность импульса горизонтальной синхронизации составляет 8 символов или 48 пикселей. Строчного гасящего импульса нет, но символы выводятся Монитором только в 64 из 78 возможных позиций (см. известную картинку); остальные 14 (восемь слева, шесть справа) имитируют строчный гасящий импульс. Вся строка целиком занимает 468 + 48 = 516 пикселей.
Каждая строка символов занимает по высоте 10 пикселей, и в кадре таких строк 30, т.е. видимая часть кадра в высоту занимает 300 пикселей.
Длительность импульса вертикальной синхронизации составляет 1 строку, т.е. еще 10 пикселей. Весь кадр - это 300 + 10 = 310 строк. Кадровый гасящий импульс имитируется тремя пустыми строками вверху и двумя - внизу кадра.
Сравним с параметрами контроллера ILI6482, примененного в моем TFT дисплее:
Параметр |
ILI6482 мин. |
ILI6482 тип. |
ILI6482 макс. |
Радио 86РК |
Ед. изм. |
Pixel clock |
5 |
6 |
12 |
8 |
МГц |
Длительность строки |
520 |
525 |
800 |
516 |
пикселей |
Видимая часть |
480 |
468 |
пикселей |
Back porch |
36 |
40 |
255 |
0 |
пикселей |
Front porch |
4 |
5 |
65 |
0 |
пикселей |
Длительность кадра |
277
|
288 |
400 |
310 |
строк |
Видимая часть |
272 |
300 |
строк |
Back porch |
3 |
8 |
31 |
0 |
строк |
Front porch |
2 |
8 |
97 |
0 |
строк |
Не совсем то, что нужно, конечно, но достаточно близко. К тому же в ходе экспериментов выяснилось, что HSYNC вообще не нужен (соответствующий вход TFT панели подключается к GND), и что полярность обоих синхроимульсов нужна положительная (datasheet говорит, что отрицательная, но советует подключать их к GND, если они не используются). Необязательны также гасящие импульсы (back porch и front porch).
Помимо сигналов DOT CLOCK, HSYNC, VSYNC и VIDEO, TFT панели нужен еще сигнал DEN (Data ENable). В идеале он должен быть строчным гасящим импульсом наоборот, т.е. включаться в каждой видимой строке через (back porch) пикселов после строчного синхроимпулься и выключаться за (front porch) пикселов до следующего строчного синхроимпулься, а во время кадрового гасящего и синхроимпульса не включаться вообще. Поскольку гасящий импульс необязателен, DEN может быть сформирован как функция ИЛИ-НЕ от HSYNC и VSYNC.
В связи с тем, что на вертикальный размер экрана Радио-86РК составляет 300 пикселей, а на TFT панели их всего 272, оказалось полезным запретить DEN на первые 10-20 строк горизонтальной развертки в каждом кадре - для этого применен счетчик 74HC161, который считает синхроимпульсы горизонтальной развертки. При этом с экрана исчезают 1-2 пустых строки символов, не используемых Монитором, зато полностью помещаются те 25 строк, которые Монитором использует:
Comments (0)
You don't have permission to comment on this page.