PicChess (8 / 8 steg)

Steg 8: Video rutin



jag väljer att hålla denna del från resten av den instructable eftersom det är den rutin som genererar video, kan det bli förvirrande. Jag rekommenderar att du läser följande delar i databladet för denna micro:

Videosignalen vi måste generera består av tre delar: den Horisontell synksignal (TTL 0v - 5v), Vertikal Sync (TTL 0v - 5v) och tre färg signaler (röd grön blå, analog 0v - 0.7V). Som bilden är valt att vara monokromatiskt, de tre raderna i färg är sammankopplade och kan bara anta två nivåer. Skärmdumpen senaste mottagna bilden sparas internt och Visa den på bildskärmen, alla dessa bilder kallas en ram. Vårt uppdrag är att skapa dessa ramar i frekvens som bildskärmen förbrukar. Bilderna är "målade" på skärmen som visas i den första bilden, rad för rad, kvar att just, precis som behandlingen.

Varje ny bildruta det flaggas av en signal, som kallas vertikal sync pulse. En annan signal, som kallas Horisontell synk, generera kontinuerlig pulser. Horisontella pulsen stannar aldrig, men de första och sista pulserna i en ram ignoreras av mottagaren. 800 horisontella pulserar mitt i en ram är de som visar de rader som är show i skärmen. Någon gång mellan kanterna på horisontella signalen färg på varje pixel på den linjen sätts sätts in i RGB linje (svart = 0v, 0.7V = vit). Valet av en 40 MHz klocka underlättar för videosignalen eftersom frekvensen av var och en av dessa pixlar är 40MHz för en upplösning på 800 x 600. Varje pixel är serialiserad från video buffert av modulen SPI, varje bit av video buffert sträcks för att fylla fyra pixlar.

Videomodul styrs av det Timer 2 som är programmerad att svämma över vid exakt frekvens av Horisontell synksignal. För att generera denna signal Output jämföra används modulen för att sätta ett stift på datorn automatiskt. Avbrottet för Timer 2 används för att avgöra om detta är början av en ny ram, kontrollera den vertikala signal timingen. Avbrottet som styr den vertikala sync signalen tar lite tid att köra, och detta kan resultera i problem i ramen timing, för att korrigera detta horisontellt synksignal har också denna försening läggas till det lämnar de två signaler synkroniseras.

Med dessa två signaler synkroniseras korrekt har vi redan en synkroniserad ram. Vi behöver nya måla bilden. Modulen SPI används att serialisera ett ord (16 bitar) bit för bit genom en mikro pin. Laddar modulen direkt skulle ta nästan alla processortid och skulle inte vara lönsamt. En DMA-kanal används för att överföra en liten buffert "line" till varje rad att serialiseras (Läs "horisontell synkpuls"). Bufferten måste vara laddade startlinjen på den video buffert före varje rad i rutinen TMR2 avbrott som händer precis innan en ny rad. Och innan varje överföring DMA måste aktiveras i rätt tid att starta serialiseringen bitar.

När du använder modulen SPI egen IRQ till DMA det är ett problem, efter IRQ innan DMA överföringen det är förseningar, som genererar en bred pixel varje 16 pixlar. Ett sätt att lösa detta problem är att generera en tidsinställd IRQ för att begära DMA ladda SPI.

För att generera denna tidsinställda IRQ ansluts en annan DMA modul och en OC modul till varandra. DMA ändra avbryta tid av produktionen jämför genom att överföra en buffert till det. När OC har ett avbrott utlöser det DMA, får en ny tid avbryta och fortsätter slingan.

För att överföra en video linje (200 pixlar), processorn bara måste ladda raden buffert före varje rad. Buffert linjen kunde helt avlägsnas om denna mikro DMA kunde täcka allt RAM-minne (det är begränsat till bara 2K) genom att läsa direkt från video buffert. Den andra bilden försöker förklara detta.

Se Steg
Relaterade Ämnen