Displayansterung mit AT91SAM9263

Gast #634579
Lesenswert?
• ▲
▼
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?

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.