www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Prob. Startadresse fuer Framebuffer


Autor: Fritz Meyer (codefritz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei meinem ARM9 Samsung S3C2410 erfolgt die Vergabe der Startadresse des 
Framebuffers mit Hilfe des LCDSADR1 Registers:

LCDBANK  [29:21]
These bits indicate A[30:22] of the bank location for the video buffer 
in
the system memory. LCDBANK value cannot be changed even when
moving the view port. LCD frame buffer should be within aligned 4MB
region, which ensures that LCDBANK value will not be changed when 
moving the view port. So, care should be taken to use the malloc() 
function.

LCDBASEU  [20:0]
These bits indicate A[21:1] of the start address of the LCD frame 
buffer.


Das Register LCDSADR2 Register legt das Ende des Framebuffers fest:

LCDBASEL [20:0]
These bits indicate A[21:1] of the end address of the LCD frame buffer.
LCDBASEL = ((the fame end address) >>1) + 1
         = LCDBASEU + (PAGEWIDTH+OFFSIZE)x(LINEVAL+1)

Weiterhin werden fuer die Konfiguration das LCDSADR3 benoetigt:

OFFSIZE   [21:11]
Virtual screen offset size (the number of half words).
This value defines the difference between the address of the last half
word displayed on the previous LCD line and the address of the first 
half word to be displayed in the new LCD line.

PAGEWIDTH  [10:0]
Virtual screen page width (the number of half words).
This value defines the width of the view port in the frame.


Nun verstehe ich nicht wie die Register vor allem LCDBASEU und LCDBASEU 
belegt werden sollen. Das von Samsung angegebene Beispiel bringt mich 
leider auch nichtr weiter:

Example 1. LCD panel = 320*240, 16gray, single scan
           Frame start address = 0x0c500000
           Offset dot number = 2048 dots ( 512 half words )
           LINEVAL = 240-1 = 0xef
           PAGEWIDTH = 320*4/16 = 0x50
           OFFSIZE = 512 = 0x200
           LCDBANK = 0x0c500000 >> 22 = 0x31
           LCDBASEU = 0x100000 >> 1 = 0x80000
           LCDBASEL = 0x80000 + ( 0x50 + 0x200 ) * ( 0xef + 1 ) = 
0xa2b00

Besten Dank fuer jede Hilfe.

Autor: Fritz Meyer (codefritz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
keiner ne Idee?

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.