SSD1963
Ich habe mehrere LC-Displays von ITead Studio, ITDB02-4.3 und ITDB02-5.0 (jeweils TFT, mit einem SSD1963-Controller), und zum habe zum Ansteuern und Initialisieren des Controllers folgende kleine Library geschrieben.
Aktuelle Version: Github
Lizenz: BSD
Ein kleines Testprogramm namens test-ssd
findet sich
hier.
Es erlaubt, Einstellungen wie Bildwiederholrate des Displays und PLL-Einstellungen des Chips vorzunehmen,
alle berechneten Werte zu kontrollieren und gibt ebenfalls ein Listing der zu sendenden Kommandos aus.
Verwendung
Da die Library Kommandos zum Controller sendet, müssen vor dem Einbinden von
ssd1963.h
zwei Makros definiert werden, die jeweils ein Byte
versenden, jedoch mit unterschiedlich gesetzten Kontrollleitungen (D/#C und #WR). Dies ist in
ssd1963.h
beschrieben. Die Details, wie die Kontrollleitungen
zu setzen sind finden sich im Datenblatt zum SSD1963.
SSD_WR_CMD(x)
- Setze D/#C (auf low)
- Setze #WR (auf low)
- Schreibe das Byte
x
auf die Busleitungen D[7:0] - Löse #WR (setzen auf high)
- Löse D/#C (setzen auf high)
SSD_WR_DATA(x)
- Setze #WR (auf low)
- Schreibe das Byte
x
auf die Busleitungen D[7:0] - Löse #WR (setzen auf high)
Optional kann noch das folgende Makro definiert werden, welches erlaubt, Daten vom Controller zu empfangen.
SSD_RD_DATA()
- Setze #RD (auf low)
- Lies Byte von D[7:0]
- Löse #RD (setzen auf high)
- Gib gelesenes Byte als Wert des Ausdrucks des Makros zurück
Benötigen die Makros Zugriff auf weitere Funktionen die erst durch andere Header bereitgestellt werden, so kann
der Include-Pfad der Datei durch Definition des Makros SSD_IO_MACROS
angeben werden.
ssd1963.h
inkludiert diese Datei dann. Recht einfach lässt sich dies über einen Compiler-Parameter
-DSSD_IO_MACROS=\"path/to/headers.h\"
steuern (die Backslashes sind wegen Shell-Escapings dort).
Ein Beispiel bietet das Makefile.
Folgend zwei Beispiel-Init-Sequenzen für das 5.0"- und das 4.3"-Display mit den Standardwerten für das je verwandte LCD, wie aus den Datenblättern zu HSD050IDW1-A bzw HSD043I9W1-A zu entnehmen.
Hier wurden die beiden Makros definiert als:
Die Initialisierung erfolgt in ssd-test.c
mit folgenden Timings:
5.0" | 4.3" | |
Horiz. Visible | 800 | 480 |
Horiz. Front Porch | 40 | 5 |
Horiz. Sync Width | 48 | 8 |
Horiz. Back Porch | 40 | 40 - 8 |
Vert. Visible | 480 | 272 |
Vert. Front Porch | 13 | 8 |
Vert. Sync Width | 3 | 1 |
Vert. Back Porch | 29 | 8 - 1 |
Beispiel für ITDB02-5.0
96 MHz, VCO: 480 MHz sys: 96 MHz, px clk: req'ed: 0, set: 33000000.0 Hz, lshift: 360448, rate: 67.734 Hz ht, hps, hpw, lps, lpspp: 928 88 48 0 0 vt, vps, vpw, fps : 525 32 3 0 hdp: 800, vdp: 480 SSD_WR_CMD(0x28) SSD_WR_CMD(0xe0) SSD_WR_DATA(0x00) SSD_WR_CMD(0xe2) SSD_WR_DATA(0x27) SSD_WR_DATA(0x04) SSD_WR_DATA(0x04) SSD_WR_CMD(0xe0) SSD_WR_DATA(0x01) SSD_WR_CMD(0xe0) SSD_WR_DATA(0x03) SSD_WR_CMD(0x01) SSD_WR_CMD(0xe6) SSD_WR_DATA(0x05) SSD_WR_DATA(0x7f) SSD_WR_DATA(0xff) SSD_WR_CMD(0xb0) SSD_WR_DATA(0x20) SSD_WR_DATA(0x00) SSD_WR_DATA(0x03) SSD_WR_DATA(0x1f) SSD_WR_DATA(0x01) SSD_WR_DATA(0xdf) SSD_WR_DATA(0x00) SSD_WR_CMD(0xb4) SSD_WR_DATA(0x03) SSD_WR_DATA(0x9f) SSD_WR_DATA(0x00) SSD_WR_DATA(0x58) SSD_WR_DATA(0x2f) SSD_WR_DATA(0x00) SSD_WR_DATA(0x00) SSD_WR_DATA(0x00) SSD_WR_CMD(0xb6) SSD_WR_DATA(0x02) SSD_WR_DATA(0x0c) SSD_WR_DATA(0x00) SSD_WR_DATA(0x20) SSD_WR_DATA(0x02) SSD_WR_DATA(0x00) SSD_WR_DATA(0x00)]]>
Beispiel für ITDB02-4.3
96 MHz, VCO: 480 MHz sys: 96 MHz, px clk: req'ed: 0, set: 9000000.0 Hz, lshift: 98304, rate: 59.5238 Hz ht, hps, hpw, lps, lpspp: 525 40 8 0 0 vt, vps, vpw, fps : 288 8 1 0 hdp: 480, vdp: 272 SSD_WR_CMD(0x28) SSD_WR_CMD(0xe0) SSD_WR_DATA(0x00) SSD_WR_CMD(0xe2) SSD_WR_DATA(0x27) SSD_WR_DATA(0x04) SSD_WR_DATA(0x04) SSD_WR_CMD(0xe0) SSD_WR_DATA(0x01) SSD_WR_CMD(0xe0) SSD_WR_DATA(0x03) SSD_WR_CMD(0x01) SSD_WR_CMD(0xe6) SSD_WR_DATA(0x01) SSD_WR_DATA(0x7f) SSD_WR_DATA(0xff) SSD_WR_CMD(0xb0) SSD_WR_DATA(0x20) SSD_WR_DATA(0x00) SSD_WR_DATA(0x01) SSD_WR_DATA(0xdf) SSD_WR_DATA(0x01) SSD_WR_DATA(0x0f) SSD_WR_DATA(0x00) SSD_WR_CMD(0xb4) SSD_WR_DATA(0x02) SSD_WR_DATA(0x0c) SSD_WR_DATA(0x00) SSD_WR_DATA(0x28) SSD_WR_DATA(0x07) SSD_WR_DATA(0x00) SSD_WR_DATA(0x00) SSD_WR_DATA(0x00) SSD_WR_CMD(0xb6) SSD_WR_DATA(0x01) SSD_WR_DATA(0x1f) SSD_WR_DATA(0x00) SSD_WR_DATA(0x08) SSD_WR_DATA(0x00) SSD_WR_DATA(0x00) SSD_WR_DATA(0x00)]]>