Casa > Notícies > Contingut

Exemple de sincronització

Apr 26, 2019

2.2.4 Exemple de sincronització: 480x272 a 60Hz

Per a una actualització de la pantalla a 60Hz, hi ha 48000000/60 = 800000 rellotges ràpids per marc.

Si es defineix el divisor PCLK REG_PCLK a 5, es dóna una freqüència PCLK de 9,6 MHz i

800000/5 = 160000PCLKs per marc.

Per a una pantalla de 480 x 272, el període horitzontal típic és de 525 rellotges i el període vertical és

286 línies. Una mica de cerca mostra que una mida de 548 x 292 dóna un període de 160016 rellotges,

molt a prop del blanc. Així, amb una pantalla REG_HCYCLE = 548 i REG_VCYCLE = 292

la freqüència és gairebé exactament 60Hz. Els altres paràmetres de registre es poden establir directament des de la

full de dades del panell de visualització.


2.2.5 Seqüència d'inicialització

Aquesta secció descriu la seqüència d’inicialització en l’escenari diferent.

 Seqüència d'inicialització durant l'arrencada:

1. Utilitzeu el rellotge MCI SPI no més de 11MHz

2. Envia l'ordre "CLKEXT" a FT800

3. Envia l’ordre "ACTIVE" d’Host per habilitar el rellotge a FT800.

4. Configureu els registres de sincronització de vídeo, excepte REG_PCLK

5. Escriviu la primera llista de visualització

6. Escriviu immediatament la llista de visualització REG_DLSWAP, FP800 swaps

7. Activeu el control de llum posterior per a la visualització

8. Escriviu REG_PCLK, la sortida de vídeo comença amb la primera llista de visualització

9. Utilitzeu el rellotge MCI SPI no més de 30MHz


MCU_SPI_CLK_Freq (<11mhz); utilitza="" el="" rellotge="" mci="" spi="" inferior="" a="">

comandament host_ (CLKEXT); // enviar ordre a "CLKEXT" a FT800

host_command (ACTIVE); // envieu l’ordre host "ACTIVE" a FT800

/ * Configuració dels registres de visualització: demostració per a la resolució WQVGA * /

wr16 (REG_HCYCLE, 548);

wr16 (REG_HOFFSET, 43);

wr16 (REG_HSYNC0, 0);

wr16 (REG_HSYNC1, 41);

wr16 (REG_VCYCLE, 292);

wr16 (REG_VOFFSET, 12);

wr16 (REG_VSYNC0, 0);

wr16 (REG_VSYNC1, 10);

wr8 (REG_SWIZZLE, 0);

wr8 (REG_PCLK_POL, 1);

wr8 (REG_CSPREAD, 1);

wr16 (REG_HSIZE, 480);

wr16 (REG_VSIZE, 272);

/ * escriu la primera llista de visualització * /

wr32 (RAM_DL + 0, CLEAR_COLOR_RGB (0,0,0));

wr32 (RAM_DL + 4, CLEAR (1,1,1));

wr32 (RAM_DL + 8, DISPLAY ());

wr8 (REG_DLSWAP, DLSWAP_FRAME); // permís de llista de visualització

wr8 (REG_GPIO_DIR, 0x80 | Ft_Gpu_Hal_Rd8 (phost, REG_GPIO_DIR));

wr8 (REG_GPIO, 0x080 | Ft_Gpu_Hal_Rd8 (phost, REG_GPIO)); // habilitar el bit de visualització

wr8 (REG_PCLK, 5); // després que aquesta pantalla sigui visible a la pantalla LCD

MCU_SPI_CLK_Freq (<30mhz); utilitzar="" el="" rellotge="" mci="" spi="" fins="" a="">

Fragment de codi 1 Seqüència d'inicialització



 Seqüència d'inicialització des de la desconnexió mitjançant pin PIN_N:

1. Gireu el pin PD_N a l'alçada alta

2. Espereu com a mínim 20 ms

3. Executeu la "seqüència d'inicialització durant l'arrencada" dels passos 1 a 9

 Seqüència d'inicialització des del mode de repòs:

1. Envia l’ordre "ACTIU" per habilitar el rellotge a FT800

2. Espereu com a mínim 20 ms

3. Executeu la "seqüència d'inicialització durant l'arrencada" dels passos 5 a 8

 Seqüència d'inicialització del mode d'espera:

Executeu tots els passos esmentats a "Sequence de inicialització del mode de repòs"

excepte esperar almenys 20 ms al pas 2.

Nota: consulteu el full de dades FT800 per obtenir informació sobre els modes de potència. Seguiu la secció 2.3 per a

gestió d’àudio durant les operacions d’esgotament i restabliment.


2.3 Sintetitzador de so

Codi de mostra per jugar a C8 al xilòfon:

wr8 (REG_VOL_SOUND, 0xFF); // estableix el volum al màxim

wr16 (REG_SOUND, (0x6C < 8)="" |=""> // Nota MIDI C8 sobre xilòfon

wr8 (REG_PLAY, 1); // reproduir el so

El sintetitzador de sons del fragment de codi 2 reprodueix C8 al xilòfon


Codi de mostra per comprovar l’estat de la reproducció de so:

Sound_status = rd8 (REG_PLAY); // s'està fent 1 play, el joc 0 ha acabat

El sintetitzador de so del fragment de codi 3 comprova l'estat de la reproducció de so



Codi de mostra per aturar la reproducció de so:

wr16 (REG_SOUND, 0x0); // configura el silenci com a so que es reproduirà

wr8 (REG_PLAY, 1); // reproduir so

Sound_status = rd8 (REG_PLAY); // s'està fent 1 play, el joc 0 ha acabat

El sintetitzador de so del fragment de codi 4 deixa de reproduir el so


Per evitar un so de so en reset o canvi d’estat d’alimentació, engegueu un so "silenciós",

i espereu que es completi (la realització de la reproducció de so és quan REG_PLAY conté un valor

de 0). Això defineix el valor de sortida a nivell 0. En reiniciar, el motor d’àudio es reprodueix

so "desactivar" per conduir la sortida al nivell de la meitat.

Nota: consulteu el full de dades FT800 per obtenir més informació sobre el sintetitzador de so i l'àudio

reproducció.


2.4 Reproducció d’àudio

FT800 admet tres tipus de format d'àudio: 4 bits IMA ADPCM, 8 bits signats PCM, 8 bits uLaw. Per al format IMA ADPCM, tingueu en compte l’ordre de bytes: dins d’un byte, la primera mostra

(4 bits) es localitzaran des del bit 0 fins al bit 3, mentre que la segona mostra (4 bits) es localitzarà des de

bit 4 al bit 7.

Per reproduir les dades d’àudio en FT800 RAM, FT800 requereix l’adreça inicial a

REG_PLAYBACK_START per estar alineats de 64 bits (8 bytes). A més, la durada de l’àudio

Les dades especificades per REG_PLAYBACK_LENGTH han de ser alineades de 64 bits (8 bytes).

Per aprendre a reproduir les dades d’àudio, comproveu el codi d’exemple següent:

wr8 (REG_VOL_PB, 0xFF); // configura el volum de reproducció d'àudio

wr32 (REG_PLAYBACK_START, 0); // configurar l'adreça inicial del buffer d'àudio

wr32 (REG_PLAYBACK_LENGTH, 100 * 1024); // configurar la longitud del buffer d'àudio

wr16 (REG_PLAYBACK_FREQ, 44100); // configura la freqüència de mostreig d'àudio

wr8 (REG_PLAYBACK_FORMAT, ULAW_SAMPLES); // configurar el format d'àudio

wr8 (REG_PLAYBACK_LOOP, 0); // configurar una vegada o la reproducció contínua

wr8 (REG_PLAYBACK_PLAY, 1); // iniciar la reproducció d'àudio

Fragment de codi 5 Reproducció d’àudio



AudioPlay_Status = rd8 (REG_PLAYBACK_PLAY); // La reproducció d’un àudio està passant,

S'ha acabat la reproducció d’àudio 0

Fragment de codi 6 Comproveu l'estat de la reproducció d'àudio

wr32 (REG_PLAYBACK_LENGTH, 0); // configurar la longitud de reproducció a 0

wr8 (REG_PLAYBACK_PLAY, 1); // iniciar la reproducció d’àudio

Fragment de codi 7 Atureu la reproducció d’àudio


2.5 Les rutines gràfiques

Aquesta secció descriu les característiques gràfiques i captura alguns exemples.

2.5.1 Primers passos

Aquest petit exemple crea una pantalla amb el text "FTDI", amb un punt vermell.

image

El codi per dibuixar la pantalla és:

wr32 (RAM_DL + 0, CLEAR (1, 1, 1)); // neteja la pantalla

wr32 (RAM_DL + 4, BEGIN (BITMAPS)); // comença a dibuixar mapes de bits

wr32 (RAM_DL + 8, VERTEX2II (220, 110, 31, 'F')); // ascii F al tipus de lletra 31

wr32 (RAM_DL + 12, VERTEX2II (244, 110, 31, 'T')); // ascii T

wr32 (RAM_DL + 16, VERTEX2II (270, 110, 31, 'D')); // ascii D

wr32 (RAM_DL + 20, VERTEX2II (299, 110, 31, 'I')); // ascii I

wr32 (RAM_DL + 24, END ());

wr32 (RAM_DL + 28, COLOR_RGB (160, 22, 22)); // canvia de color a vermell

wr32 (RAM_DL + 32, POINT_SIZE (320)); // configura la mida del punt a 20 píxels

radi

wr32 (RAM_DL + 36, BEGIN (POINTS)); // comença els punts de dibuix

wr32 (RAM_DL + 40, VERTEX2II (192, 133, 0, 0)); // punt vermell

wr32 (RAM_DL + 44, END ());

wr32 (RAM_DL + 48, DISPLAY ()); // mostra la imatge

Fragment de codi 8 Introducció


Després de carregar les ordres de dibuix anteriors a la llista de visualització RAM, registre

REG_DLSWAP s’ha de configurar a 0x02 per tal d’actuar la nova llista de visualitzacions

a la següent actualització del marc.

Nota:

 La llista de visualització sempre comença a l'adreça RAM_DL

 L’adreça augmenta sempre per 4 (bytes), ja que cada ordre té una amplada de 32 bits.

 Es recomana utilitzar l'ordre CLEAR abans de qualsevol altre dibuix

operació, per tal de posar el motor gràfic FT800 en un estat conegut.

 El final de la llista de visualització sempre es marca amb l'ordre DISPLAY

2.5.2 Pla de coordenades

La figura següent il·lustra el pla de coordenades gràfiques i la seva àrea visible.

Les coordenades X i Y vàlides oscil·len entre -1024 i 1023 en precisió de píxel, és a dir, de

-16384 a 16383 en 1 / 16th precisió de píxel.


image

2.5.3 Patró de dibuix

El patró general del dibuix és:

 COMENÇAR amb un dels tipus primitius

 Introduïu un o més vèrtexs, que especifiquin la ubicació de la primitiva

la pantalla

 END per marcar el final de la primitiva

(nota: en molts exemples, l'ordre END no apareix explícitament)

Els tipus primitius que el suport del motor gràfic són:

 BITMAPS: matrius rectangulars de píxels, en diversos formats de color

 PUNTS: punts antialias, el radi del punt és de 1-256 píxels

 LÍNIES: línies antial·liades, amb amplada de 0 a 4095 unitats de 1/16 de píxels.

(l’amplada és del centre de la línia fins al límit)

 LINE_STRIP: línies anti-alias, connectades entre si

 RECTS: rectangles arrodonits, es pot ajustar la curvatura de les cantonades

utilitzant LINE_WIDTH.

 EDGE_STRIP_A / B / L / R - tires de vora

Exemples


Dibuixeu punts amb un radi variable de 5 píxels a 13 píxels amb diferents colors:

dl (COLOR_RGB (128, 0, 0));

dl (POINT_SIZE (5 * 16));

dl (BEGIN (POINTS));

dl (VERTEX2F (30 * 16,17 * 16));

dl (COLOR_RGB (0, 128, 0));

dl (POINT_SIZE (8 * 16));

dl (VERTEX2F (90 * 16, 17 * 16));

dl (COLOR_RGB (0, 0, 128));

dl (POINT_SIZE (10 * 16));

dl (VERTEX2F (30 * 16, 51 * 16));

dl (COLOR_RGB (128, 128, 0));

dl (POINT_SIZE (13 * 16));

dl (VERTEX2F (90 * 16, 51 * 16));

image

L'ordre VERTEX2F proporciona la ubicació del centre del cercle.

Dibuixa línies amb diferents mides de 2 píxels a 6 píxels amb diferents colors (ample de línia)

la mida és del centre de la línia fins a la frontera):

dl (COLOR_RGB (128, 0, 0));

dl (LINE_WIDTH (2 * 16));

dl (BEGIN (LINES));

dl (VERTEX2F (30 * 16,38 * 16));

dl (VERTEX2F (30 * 16,63 * 16));

dl (COLOR_RGB (0, 128, 0));

dl (LINE_WIDTH (4 * 16));

dl (VERTEX2F (60 * 16,25 * 16));

dl (VERTEX2F (60 * 16,63 * 16));

dl (COLOR_RGB (128, 128, 0));

dl (LINE_WIDTH (6 * 16));

dl (VERTEX2F (90 * 16, 13 * 16));

dl (VERTEX2F (90 * 16, 63 * 16));

Les ordres de VERTEX2F són en parelles per definir el punt d'inici i d'acabat de la línia.



Dibuixa un rectangle amb mides de dimensions 5x25, 10x38 i 15x50 (s'utilitza la mida de l'amplada de la línia

per a la curvatura de cantonada, els píxels LINE_WIDTH s'afegeixen a les dues direccions, a més de

dimensió rectangle):

image

dl (COLOR_RGB (128, 0, 0));

dl (LINE_WIDTH (1 * 16));

dl (BEGIN (RECTS));

dl (VERTEX2F (28 * 16,38 * 16));

dl (VERTEX2F (33 * 16,63 * 16));

dl (COLOR_RGB (0, 128, 0));

dl (LINE_WIDTH (5 * 16));

dl (VERTEX2F (50 * 16,25 * 16));

dl (VERTEX2F (60 * 16,63 * 16));

dl (COLOR_RGB (128, 128, 0));

dl (LINE_WIDTH (10 * 16));

dl (VERTEX2F (83 * 16, 13 * 16));

dl (VERTEX2F (98 * 16, 63 * 16));

Les ordres de VERTEX2F són per parelles per definir les cantonades superior esquerra i inferior dreta de

el rectangle.

image

image

image

image

2.5.4 Escriure llistes de visualització

L’escriptura de les entrades de la llista de visualització amb wr32 () és llarga i propensa a l’error

es pot utilitzar la funció:

image

image

image

L'ordre COLOR_RGB canvia el color del dibuix actual, que acoloreix el mapa de bits.

L’ordre COLOR_A canvia el dibuix actual alfa i canvia la transparència

del dibuix: una alfa de 0 significa totalment transparent i una alfa de 255 és totalment

opac. Aquí un valor de 150 dóna un efecte parcialment transparent.

image

2.5.7 VERTEX2II i VERTEX2F

L'ordre VERTEX2II utilitzat anteriorment només permet coordenades de pantalla positives. Si el

El mapa de bits està parcialment fora de pantalla, per exemple durant un desplaçament de la pantalla, llavors és necessari

especifiqueu les coordenades de la pantalla negativa. L'ordre VERTEX2F permet negatiu

coordenades. També permet coordenades fraccionals, ja que especifica la pantalla (x, y) en

unitats de 1/16 de píxel.

Per exemple, dibuixant el mateix mapa de bits en la posició de la pantalla (-10, -10) amb VERTEX2F:

image

image

image

2.5.9 Rendiment

El motor gràfic no té cap marc de marcatge: fa servir composició dinàmica per crear-ne cadascun

mostrar la línia durant l’exploració. Per això, hi ha un temps finit disponible

dibuixa cada línia. Aquest temps depèn dels paràmetres d’exploració (REG_PCLK i)

REG_HCYCLE) però mai és inferior a 2048 cicles de rellotge intern.

Alguns límits de rendiment:

 La longitud de la llista de visualització ha de ser inferior a 2048 instruccions, ja que la

el motor de gràfics obté comandaments de llista de visualitzacions per un rellotge.

 Els píxels de rendiment del motor gràfic són de 4 píxels per rellotge, per a qualsevol

la línia amb ordres de visualització 2048 ha de ser el rendiment total de píxels dibuixat

menys de 8192.

 Per a alguns formats de mapa de bits, la taxa de dibuix és d’1 píxel per rellotge. Aquests són

TEXT8X8, TEXTVGA i PALETTED.

 Per a píxels filtrats bilineals, la taxa de dibuix es redueix a ¼ píxels per rellotge.

La majoria de formats de mapa de bits es dibuixen a 1 píxel per rellotge i els formats anteriors

(TEXT8X8, TEXTVGA i PALETTED) dibuixen a 1 píxel cada 4 rellotges.

image