Stap 8: Video Routine
- Serial Peripheral Interface (SPI) - dsPIC33F
- Directe geheugentoegang (DMA) (deel III) - dsPIC33F
- Uitvoer vergelijken - dsPIC33F
Het video signaal dat we moeten genereren is samengesteld uit drie delen: de horizontale sync-signaal (TTL 0v - 5v), verticale Sync (TTL 0v - 5v) en de drie kleur signalen (rood groen en blauw, analoge 0v - 0.7v). Als de afbeelding monochroom wordt gekozen, de drie lijnen van kleur zijn met elkaar verbonden en kunnen alleen maar aannemen dat twee niveaus. Het scherm vangt de laatste ontvangen afbeelding wordt intern opgeslagen en weer te geven op het beeldscherm, wordt elk van deze beelden een frame genoemd. Onze missie is het creëren van deze frames in de frequentie waarmee de monitor verbruikt. De beelden zijn 'geschilderd' op het scherm zoals weergegeven in de eerste afbeelding, lijn door lijn, overgelaten aan het recht, net als lezing.
Elk nieuw frame er wordt gemarkeerd door een signaal, genaamd de verticale sync puls. Een ander signaal genaamd de horizontale sync, genereren continue pulsen. De horizontale pols nooit stopt, maar de eerste en laatste pulsen in een frame worden verwijderd door de ontvanger. De 800 horizontale pulsen in het midden van een frame zijn degenen die de regels die weergeven in het scherm worden aangeven. Op een gegeven moment tussen de randen van het horizontale signaal wordt de kleur van elke pixel op die lijn gezet wordt gezet in de RGB-lijn (zwarte = 0v, 0.7v = wit). De keuze van een 40 MHz klok vergemakkelijkt de generatie van het video signaal omdat de frequentie van elk van deze pixels 40MHz voor een resolutie van 800 x 600 is. Elke pixel serienummer uit de video buffer door de SPI-module, elke bit van de video buffer wordt uitgerekt om te vullen vier pixels.
De video module wordt beheerd door de Timer-2 die is geprogrammeerd om overloop met precies de frequentie van de horizontale sync-signaal. Voor het genereren van dit signaal het vergelijken van de Output wordt module gebruikt om een pin de computer automatisch ingeschakeld. De interrupt voor Timer 2 wordt gebruikt om te beslissen of dit het begin van een nieuw frame is, controle van de verticale signaal timing. De interrupt die Hiermee bepaalt u de verticale sync-signaal duurt enige tijd om uit te voeren, en dit kan leiden tot problemen in de timing van het frame, om dit te corrigeren de horizontale sync-signaal heeft ook deze vertraging toegevoegd aan het verlaten van de twee signalen gesynchroniseerd.
We hebben met deze twee signalen correct gesynchroniseerd al een gesynchroniseerde frame. We moeten nieuwe schilderen van het beeld. De SPI-module wordt gebruikt om een woord (16 bits) beetje bij beetje via een micro pin serialize. Laden van de module direct zou bijna alle van de processortijd en niet levensvatbaar zouden zijn. Een DMA-kanaal wordt vervolgens gebruikt voor het overbrengen van een kleine buffer 'lijn' naar elke regel worden geserialiseerd (Lees 'horizontale sync puls'). De buffer moet worden geladen startlijn van de video buffer voorafgaand aan elke regel in de TMR2 interrupt routine, die vlak voor een nieuwe regel gebeurt. En vóór elke overdracht DMA op het juiste moment om te beginnen de bits serializing moet worden geactiveerd.
Bij het gebruik van de eigen SPI-module IRQ aan de DMA er is een probleem, na de IRQ en vóór de DMA-overdracht er is een vertraging, die een breed pixel elke 16 pixels genereert. Unidirectioneel gebruikt bij het oplossen van dit probleem is het genereren van een getimede IRQ om te vragen de DMA voor het laden van de SPI.
Voor het genereren van deze getimede IRQ een andere DMA-module en een OC-module met elkaar zijn verbonden. De interrupt-tijd van de uitvoer te vergelijken de DMA wijzigen door een buffer te brengen naar het. Er wordt gegenereerd wanneer de OC een interrupt heeft de DMA, ontvangen van een nieuwe tijd te onderbreken en voortzetting van de lus.
Dat voor het verzenden van een video lijn (200 pixels), de processor alleen heeft voor het laden van de buffer lijn voorafgaand aan elke regel. De buffer-regel kan volledig kunnen worden opgeheven als deze micro DMA betrekking op al het RAM-geheugen hebben kan (het is beperkt tot slechts 2K) door lezing rechtstreeks uit de video buffer. De tweede afbeelding probeert dit uit te leggen.