www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Displayansterung mit AT91SAM9263


Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat denn keiner einen Tip für mich?

Autor: majo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Pointer die auf Hardwareregister zeigen müssen immer volatile sein!!!!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.