www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Blackfin: Spikes beim Umkonfigurieren der Timer


Autor: Sebastian B (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich versuche schon recht erfolgreich mit dem PPI eines BF537 ein TFT LCD 
anzusteuern. Um die noetige lange Schwarzschulter nach dem VSYNC-Puls zu 
erzeugen benutze ich einen Interrupt der das PPI voruebergehend 
deaktiviert. VSYNC erzeuge ich mit einem eigenen Timer, PPI laeuft mit 
einem Framesync.

Beim Umkonfigurieren des Timers in der ISR bekomme ich immer wieder 
kurze Spikes die das Signal versauen. So sieht mein Code im Moment aus:
EX_INTERRUPT_HANDLER(ppi_dma0_isr) 
{
  uint16_t status = *pDMA0_IRQ_STATUS;
  
  *pDMA0_IRQ_STATUS |= DMA_DONE;    // acknowledge interrupt

  if((status & DMA_DONE) && !(status & DMA_RUN)) 
  {
    // DMA workload done
    
    *pTIMER_DISABLE = TIMDIS0|TIMDIS2;
    *pPPI_CONTROL &= ~PORT_EN;
    *pDMA0_CONFIG &= ~DMAEN;
    ssync();
    
    // generate V Front Porch
    *pTIMER1_CONFIG = CLK_SEL|TIN_SEL|IRQ_ENA|PULSE_HI|PERIOD_CNT|PWM_OUT;
    *pTIMER1_PERIOD = TFT_V_FRONT_PORCH * TFT_LINE;
    *pTIMER1_WIDTH  = *pTIMER1_PERIOD;
    *pTIMER_ENABLE = TIMEN1;
  }
  ssync();
}

Wie kann ich das besser machen?

Sebastian

Autor: Strubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Sebastian,

ich weiss leider kein Heilmittel zu deinem Problem, aber es ist relativ 
"gefaehrlich", den PPI innerhalb der DMA IRQ service routine an & 
abzuschalten, da er noch ein kleines Hardware-FIFO enthaelt. Heisst, 
wenn der DMA0 IRQ auftritt, ist zwar der DMA-Transfer vorbei, aber 
womoeglich noch was im FIFO, wenn du den PPI deaktivierst.
Im Prinzip sollte es nicht noetig sein, den PPI abzuschalten. Bin mir 
aber noch nicht ganz sicher, ob ich richtig verstanden habe, wie dein 
TFT gefuettert werden will. Normalerweise muesste es ansich reichen, die 
HSYNC und VSYNC timings mit den Timern per PPI_FS1 / PPI_FS2 zu 
generieren, ohne "Gated clock".

Um den dauernden Datenfluss zu gewaehrleisten, kann man dann verkettete 
Descriptor-Listen benutzen - und schreibt immer in den Pingpong-Puffer, 
der grade "offline" ist (also nicht ge DMA't wird). Dann ist der IRQ 
service handler eigentlich kaum noch noetig, bzw. nur noch relevant, 
wenn man der Grafikapplikation den aktuell gezeichneten Puffer mitteilen 
will.

Schoene Gruesse,

- Strubi

Autor: Sebastian B. (sfreak) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

mein Problem mit dem Timing war blos die lange Pause, die nach dem VSYNC 
noetig ist. Die kann ich soweit ich das sehe nicht mit dem PPI erzeugen, 
da es das PPI_DELAY (oder wie es hiess) Register nur fuer die Zeilen 
gibt.

Aber mit dem PPI abschalten hast du recht. Auch DMA muesste ich 
eigentlich an lassen koennen wenn ich mein Descriptor-Array etwas 
aufbohre. Es sollte ja eigentlich reichen wenn ich den PPI_FS1 Timer 
abschalte. Werde das mal ausprobiere, wird aber ein Paar Tage dauern bis 
ich wieder dazu komme.

Ich benutze im Moment PPI mit einem Framesync und DMA mit einem 
Descriptor-Array das einen Eintrag fuer jede Bildzeile enthaelt. Die 
VSYNC-Pulse und ein Data Enable-Signal erzeuge ich mit weiteren TImern.

Sebastian

Autor: Strubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Sebastian,

wuerde in dem Fall mal PPI mit zwei Framesyncs probieren, da sollte man 
relativ grosszuegige Timings auf dem PPI_FS1 generieren koennen..
Die Anwendungen, die ich so bisher kenne, benutzen dafuer dann 2D-DMA 
und jeweils nur 2 Deskriptoren fuer die 2 Bildpuffer 
("ping-pong"-Verfahren).
Heisst allerdings, PPI_FS2 muss dann den Zeilen-Sync (HBlank) machen.
Weiss nicht, ob das bei deiner HW so anwendbar ist, aber vielleicht 
hilft's ja doch weiter.

Gruss,

- Strubi

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.