Hi,
hat jmd von euch bereits Erfahrungen mit dem Display-Controller SSD1322
sammeln können? Die Initialisierung sowie das Beschreiben vom GDDRAM
funktioniert. Allerdings kann ich vom GDDRAM nicht richtig Auslesen.
Wenn ich z.B. ein Pixel auf 0xF (volle Helligkeit) gesetzt habe , wir
dieses Pixel auch auf dem Display hell angezeigt. Beim Auslesen der
gleichen GDDRAM-Adresse bekomm ich aber nicht 0xF zurückgeliefert
sondern irgendetwas anderes - z.B. 0xD....
Nachdem mein Prozessor keinen externen Datenbus besitzt, hab ich die
ersten 7 bits vom GPIO-PortB für den Datenbus verwendet. COMMAND gibt
an, dass das A0/RS Pin low ist und bei DATA ist dieser High.
1 | unsigned char read_data(void)
|
2 | {
|
3 | unsigned char data = 0x00;
|
4 |
|
5 | GPIOB->CRL &= ~0xFFFFFFFF; // reset port-pins for both leds
|
6 | GPIOB->CRL |= 0x88888888; // set input with pull-up/down
|
7 |
|
8 | //A0 bzw. RS is high
|
9 | GPIOC->BSRR = (1 << 4);
|
10 | //r/w high setzen
|
11 | GPIOC->BSRR = (1 << 5);
|
12 | //E pin auf high setzen
|
13 | GPIOC->BSRR= 1<<6;
|
14 |
|
15 | //cs auf low setzen
|
16 | GPIOC->BRR = (1 << 8);
|
17 |
|
18 | delay_ms(100);
|
19 |
|
20 |
|
21 | /* daten auslesen° */
|
22 | data = GPIOB->IDR & 0xFF;
|
23 |
|
24 |
|
25 | //cs auf high ziehen
|
26 | GPIOC->BSRR = (1 << 8);
|
27 | delay_ms(100);
|
28 |
|
29 |
|
30 | //r/w auf low setzen
|
31 | GPIOC->BRR = (1 << 5);
|
32 | //E pin auf high setzen
|
33 | GPIOC->BSRR= 1<<6; //set to high
|
34 |
|
35 | return data;
|
36 | }
|
37 |
|
38 |
|
39 | void GDDRAMData(void)
|
40 | {
|
41 |
|
42 | unsigned char columnPixel[2];
|
43 |
|
44 | /* set addr to write */
|
45 | write_cmd(COMMAND, 0x75);
|
46 | write_cmd(DATA, 0x1C); //0x1C ist mein Offset -> 0 column
|
47 | write_cmd(COMMAND, 0x15);
|
48 | write_cmd(DATA, 0);
|
49 |
|
50 | /* write to GDDRAM (das erste Pixel leuchtet) */
|
51 | write_cmd(COMMAND, 0x5C);
|
52 | write_cmd(DATA, 0xF0);
|
53 | write_cmd(DATA, 0x00);
|
54 |
|
55 | /* set addr to read */
|
56 | write_cmd(COMMAND, 0x75);
|
57 | write_cmd(DATA, 0x1C); //0x1C ist mein Offset -> 0 column
|
58 | write_cmd(COMMAND, 0x15);
|
59 | write_cmd(DATA, 0);
|
60 |
|
61 | /* read GDDRAM */
|
62 | write_cmd(COMMAND, 0x5D);
|
63 | columnPixel[0] = read_data(); // Dummy reading
|
64 | columnPixel[0] = read_data(); // pixel 0, 1
|
65 | columnPixel[1] = read_data(); // pixel 2, 3
|
66 |
|
67 | }
|
Die I/Os werden alle entsprechend richtig angesprochen. Das Schreiben
des GDDRAMs funktioniert ja und den RD-Pin hab ich überprüft.
Gruß
Jens