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.