Blackfin: Spikes beim Umkonfigurieren der Timer

Gast #815963
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:
1
EX_INTERRUPT_HANDLER(ppi_dma0_isr) 
2
{
3
  uint16_t status = *pDMA0_IRQ_STATUS;
4
  
5
  *pDMA0_IRQ_STATUS |= DMA_DONE;    // acknowledge interrupt
6

7
  if((status & DMA_DONE) && !(status & DMA_RUN)) 
8
  {
9
    // DMA workload done
10
    
11
    *pTIMER_DISABLE = TIMDIS0|TIMDIS2;
12
    *pPPI_CONTROL &= ~PORT_EN;
13
    *pDMA0_CONFIG &= ~DMAEN;
14
    ssync();
15
    
16
    // generate V Front Porch
17
    *pTIMER1_CONFIG = CLK_SEL|TIN_SEL|IRQ_ENA|PULSE_HI|PERIOD_CNT|PWM_OUT;
18
    *pTIMER1_PERIOD = TFT_V_FRONT_PORCH * TFT_LINE;
19
    *pTIMER1_WIDTH  = *pTIMER1_PERIOD;
20
    *pTIMER_ENABLE = TIMEN1;
21
  }
22
  ssync();
23
}

Wie kann ich das besser machen?

Sebastian
Gast #826248
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
Persönliche Seite #826795
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
Gast #827038
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

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.