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
@ 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.
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?
@ 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!
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.
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.