Forum: Mikrocontroller und Digitale Elektronik Display Bilder über DMA lesen und schreiben


von Lisa (Gast)


Lesenswert?

Hallo,

ich steuere z.Z. ein Grafik Display (480x272Pixel, 65K Farbe) mit einem
PIC32 über SPI an. Display Controller nach wie vor RA8875.

Ich würde jetzt gerne den DM des RA8875 verwenden. Es ist eine Funktion 
vorhanden, die den DMA ab einer bestimmten Startadresse ausliest (im 
Block oder Continious Mode). Ich kann zwischen zwei verschiedenen Flash 
ROMs wählen.

Was ich jetzt nicht verstehe wie ich zum Beispiel das Bild vorher in den 
RAM schreiben soll.

Mir ist scheinbar die grundsätzliche Funktionsweise eines RAMs noch 
nicht ganz klar. Man kann auf jeden Fall BMPs direkt aus dem Speicher 
deutlich schneller auf dem Display visualisieren.

Über ein paar Cliffs über die grundsätzliche Funktionsweise eines 
Displays RAMs wäre ich dankbar. Wie gesagt, das Lesen sollte kein 
Problem sein.

Danke im Voraus

von Falk B. (falk)


Lesenswert?

@ Lisa (Gast)

>Was ich jetzt nicht verstehe wie ich zum Beispiel das Bild vorher in den
>RAM schreiben soll.

>Mir ist scheinbar die grundsätzliche Funktionsweise eines RAMs noch
>nicht ganz klar. Man kann auf jeden Fall BMPs direkt aus dem Speicher
>deutlich schneller auf dem Display visualisieren.

Ist das nicht einleuchtend? Deine Flash Speicher werden seriell 
angesprochen, dementsprechend sind sie eher "langsam".
Der IC hat 768kB RAM, welcher zum Anzeigen der Bilddaten benutzt wird. 
Man kann aber je nach Auflösung einen Teil reservieren und als 
Zwischenpuffer für Bildoperationen verwenden. Denn deine 480x272Pixel, 
65K Farbe brauchen nur 255kB, da bleiben fast 500Kb übrig.

Wenn man nun aber vorher die Daten vom Flash in den Displayspeicher 
kopiert, muss man dann nur noch die Daten von einem Teil des RAMs in den 
sichtbaren Teil kopieren. Das geht im IC parallel und um Größenordnungen 
schneller als durch das serielle Interface zu den Flash Speichern.

Also muss man erst die Daten vom Flash in den Rest des RAMs kopieren. 
Wie das genau geht, steht hoffentlich im Datenblatt.

Hmm, wie es scheint geht das so nicht. Die DMA kann nur vom Flash in den 
RAM kopieren, nicht vom RAM auf andere Bereiche im RAM. Dann muss man es 
halt anders machen. Bild vom Flash per DMA laden, dann den 
Anzeigebereich ändern, sprich auf die neuen Bilddaten umschalten.

von Lisa (Gast)


Lesenswert?

Schönen Dank schon einmal für die Antwort

Falk Brunner schrieb:
> Bild vom Flash per DMA laden, dann den
> Anzeigebereich ändern, sprich auf die neuen Bilddaten umschalten.

Wie genau der von dir zitierte Bereich zu realisieren ist, ist mir nicht 
ganz klar.

Ich poste nochmal den Beispielcode:
1
Write_Dir(FLASH_ROM_CLK,0X00);                   //FLASH frequency setting -> 0xb: SFCL frequency = System clock frequency
2
Write_Dir(FLASH_ROM_CONFIG,0X87);                //FLASH setting -> 0b10000111 -> BIT 7: Serial Flash ROM 1 is selected BIT 1 - 0 : 0b11b = DUAL Mode 1; BIT 2 : DMA Mode
3
DMA_Block_mode();                              //FLASH setting; 0b00000010 = DMA Continuous or Block Read/Write Select Bit -> 1(Bit 1): Block
4
Active_Window(0,479,0,271);
5
MemoryWrite_Position(0,0);  
6
DMA_Start_address_setting(261120*(1-1));                 //DMA Start address setting
7
DMA_block_mode_size_setting(480,272,480);
8
Write_Dir(DMA_CONFIG,0X03);                              //FLASH setting; 0b00000011; Bit 1: 0b1 ->  Block; BIT 0: WRITE: Set to 1 by MCU and reset to 0 automatically; READ: 0:Idle / 1:Busy
9
Chk_DMA_Busy();

Hier wird ja scheinbar das von Dir angesprochene Laden per DMA aus dem 
Flash realisiert.
Aber WO oder WIE wird jetzt genau das Bild in den Flash an den 
angesprochenen Flash - Speicher gespeichert? Was genau ist mit 
Anzeigebereich bzw. auf Bilddaten umschalten gemeint?

von Falk B. (falk)


Lesenswert?

@ Lisa (Gast)

>Wie genau der von dir zitierte Bereich zu realisieren ist, ist mir nicht
>ganz klar.

Mir auch nicht, denn ich habe mit dem IC noch nie gearbeitet. Ich hab 
nur vorhin mal das Datenblatt überflogen.

Ich poste nochmal den Beispielcode:

>Hier wird ja scheinbar das von Dir angesprochene Laden per DMA aus dem
>Flash realisiert.

Sieht so aus.

>Aber WO oder WIE wird jetzt genau das Bild in den Flash an den
>angesprochenen Flash - Speicher gespeichert? Was genau ist mit
>Anzeigebereich bzw. auf Bilddaten umschalten gemeint?

Irgendwie muss man dem Controller mitteilen, WO genau im RAM die 
Bilddaten liegen. Das wird wahrscheinlich hier gemacht.

Active_Window(0,479,0,271);
MemoryWrite_Position(0,0);

DMA_Start_address_setting(261120*(1-1));

Man kann ja mal testweise das ändern auf

DMA_Start_address_setting(0);

Dann werden die Daten direkt in den aktiven Speicherbereich geschieben 
und man müsste amf dem Bildschirm den Kopiervorgang sehen, auch wenn der 
nur ein paar ms dauert. GGf muss man den Vorgang mehrfach wiederholen, 
das kann man testweise ja mal in einer Endlosschleife machen, immer zwei 
Bilder wechselseitig laden.

Da muss man mal genau die Doku lesen.

Wenn das neue Bild geladen wurden, muss man möglicherweise hier was 
neues einstellen, z.B. so.

MemoryWrite_Position(0,480);

Das ist nur geraten! Ich kenn die Doku des Treibers nicht!

von Lisa (Gast)


Lesenswert?

Hmmm, Ok, danke schön.

Ich weiss halt immer nocht nicht wie ich das Image jetzt in den Flash 
Chip bekomme.

Das Laden des Images per DMA scheint nun klar und leuchtet mir auch ein.
Das ich den Chip jedesmal auslöten soll, um die Bilder die ich anzeigen 
möchte kann ich mir jedoch nicht ganz erklären.

von Falk B. (falk)


Lesenswert?

Nach allem was im Datenblatt zu finden ist, gibt es keine 
Schreibfunktion auf den Flash. D.H. man muss ein paar Testpins vorsehen 
und mittels externem Programmieradapter den Flash beschreiben. Z.B. 
sowas hier.

http://www.totalphase.com/products/aardvark-i2cspi/

Nicht ganz billig, funktioniert aber sehr gut. Billige Low Cost Adapter 
muss man halt suchen.

von Lisa (Gast)


Lesenswert?

Ich brech ab!
Vielen Dank für die Info. Sowas ähnliches habe ich mir schon gedacht, 
konnte mir aber nicht vorstellen, dass es so umständlich sein sollte den 
Flash zu beschreiben.

Nochmals Merci

von Philipp K. (philipp_k59)


Lesenswert?

Mir Serduino und dem Tool flashrom geht das fast umsonst wenn man einen 
Atmega zur Hand hat.. leider nur ein bisschen Langsam und Tricky.

Edit: Langsam

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.