Hallo @ all Ich habe das Evaluation Board AT91SAM9263. Dort ist ein Display mit 320x240 Pixel verbaut. Folgendes habe ich bis jetzt geschafft: 1. Display erfolgreich initialisiert 2. allen Pixeln eine Farbe zugeordnet Die Farbwerte für jeden Dipslaypixel habe ich in einem großem Array abgespeichert. Das Array besteht aus 76800 Elementen (320x240)Für die Intitialisierung des Arrays habe ich eine For-Schleife verwendet. Diese schreibt in jede Speicherzelle den Farbwert. Anschließend aktiviere ich den DMA-Controller und den LCD-Controller. Nun wird auf dem Display die Farbe dargestellt. Im nächsten Schritt wollte ich ein 2 dimensionales Array auf dem Display ausgeben (7x15 Pixel) Dies soll später mal einem Buchstaben entsprechen. Hierzu habe ich eine verschachtelte Vorschleife verwendet. Die wird auch erfolgreich durchlaufen. Die neunen Farbinformationen stehen im externen Speicher. Nun will ich wieder den DMA-Controller und den LCD-Controller einschalten. Jedoch funktioniert dieses nicht. Er kann nicht auf das DMA-Enable-Register zugreifen. Für den Zugriff auf die LCD-Controller und DMA-Controller-Register benutze ich einen Pointer der auf eine Struktur zeigt. Dies funktioniert auch wenn ich eine einfache For-Schleife verwenden. Verwende ich jedoch eine verschachtelte For-Schleife geht anscheinend die Adresse, die im Pointer gespeichert wird verloren. Hier mein Quellcode: void lcd_ctrl_init () { unsigned long value; unsigned int *ptr_lcd_daten; unsigned int i,j,farbe,k,l; // !!!!!! Pointer auf Struktur erzeugen !!!!! AT91PS_LCDC pLCD = (AT91PS_LCDC) AT91C_BASE_LCDC; farbe = 0xAAAAAAAA; ptr_lcd_daten = AT91C_SDRAM; for(i=0; i<=15; i++) { for(j=0; j<=7; j++) { *ptr_lcd_daten = 0xFFFFFFFF; ptr_lcd_daten = ptr_lcd_daten + 1; } } // !!!!!! Hier muss der Fehler liegen !!!! /* DMA Enable Register */ // mit dem Pointer auf das DMA-Enable Register zugreifen pLCD->LCDC_DMACON = AT91C_LCDC_DMAEN; /* DMA Enable */ /* Power Control Register */ pLCD->LCDC_PWRCON = AT91C_LCDC_PWR | 0x0c; /* POWER ON */ } Ich habe schon versucht den Pointer auf die Struktur global anzulegen, jedoch funktioniert dies auch nicht. Kann jemand einen Tip geben was ich falsch mache?
Pointer die auf Hardwareregister zeigen müssen immer volatile sein!!!!
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.