Dom > Novice > Vsebine

FT800-FT801 Notranja ura obrezovanja

Nov 03, 2018

FT800-FT801 Notranja ura obrezovanja


Video nadzorniki FTDI FT800 in FT801 ponujajo cenovno ugodno rešitev za vgrajene grafične zahteve. Poleg grafike, zasloni na dotik na dotik in avdio izhod zagotavljajo popoln človeški strojni vmesnik za zunanji svet.

Ta aplikacija bo zagotovila programsko zaporedje o tem, kako obrezati notranjo uro čipa za večjo natančnost, tako da se lahko aplikacije izvajajo brez zunanjega kristala.

Uporaba naprav FTDI v življenjski podpori in / ali varnostnih aplikacijah je popolnoma v nevarnosti uporabnika, uporabnik pa se strinja, da bo obrambo, odškodnino in zadržanje FTDI zaščitil pred kakršnimi koli in vsemi odškodninami, terjatvami, oblekami ali stroški, nastalimi s takšno uporabo.


1. Uvod

FT800 / FT801 deluje kot periferno območje SPI ali I²C do glavnega sistemskega procesorja, s čimer zagotavlja nizkocenovno, a celovito izkušnjo človeškega vmesnika z vključitvijo grafičnega prikazovanja, zaznavanja zaslona na dotik in zvočnih zmogljivosti. Upravlja se prek vmesnika SPI ali I2C z nizko pasovno širino, ki omogoča praktično uporabo katerega koli mikrokrmilnika.

FT800 / FT801 podpira notranjo uro in zunanjo uro

operacije. Notranja ura je sprostitveni oscilator, ki ga lahko z večjo natančnostjo obrežemo z registrom, tako da za več aplikacij ni potreben zunanji kristal ali ura.


2 Ura za uro

Časovniki FT800 / FT801 vključujejo vir vhodne ure in PLL. Izberete lahko vir ure

med notranjim relaksacijskim oscilatorjem in kristalnim oscilatorjem 12MHz. PLL bo pomnožil vnos

uro s 4 (privzeto), da generira nominalno sistemsko uro 48 MHz, ki napaja uro za vse notranje

registri, spomini in procesorji.

Ura notranjih relaksacijskih oscilatorjev se giblje od 4,46MHz do 12,11MHz (neokrnjena) in se lahko

obrezane s pisanjem v trim register (REG_TRIM). Po obrezovanju lahko ura doseže 12MHz pri

natančnost nastavitve +/- 2,5%. Nastavljena frekvenca se lahko med delovanjem razlikuje za +/- 3%

temperature in napetosti.

FT800 / FT801 ima 2 izhodna zatiča, ki se lahko uporabljajo za nadzor in izračun sistemske ure

pogostost. PCLK iz pin bo izpisal uro s svojo frekvenco enako fsys_clk / REG_PCLK

(REG_PCLK, programiran na ničelno vrednost). Predpostavimo, da je program REG_PCLK programiran

do 5, izhodna frekvenca PCLK pa se meri na 9,6 MHz, v tem primeru fclk_sys = 5 *

9,6MHz = 48MHz.

Druga možnost je, da se lahko fclk_sys izračuna z merjenjem frekvence ure na priključku AUDIO_L. The

AUDIO_L pin izpiše signal PWM za mono zvočni signal. Frekvenca signala PWM je

fclk_sys / 512. Če je izmerjena frekvenca na pinju AUDIO_L 93,75 kHz, potem fclk_sys = 512 *

93,75 kHz = 48 MHz.

Časovnik FT800 / FT801 je prikazan na sliki 2-1. Za aplikacije, ki uporabljajo notranjo sprostitev

samo čas, zunanji kristal ni potreben. V tem primeru je pin X1 / CLKIN vezan na GND

in pin X2 ostane nepovezan, kot je prikazano na sliki 2-2.

image

Slika 2-1 časovno vezje FT800 / FT801

image

Slika 2-2 povezava z notranjim vhodnim načinom

 

3 Zaporedje obrezovanja ure

Frekvenca frekvenčnega frekvenčnega frekvenčnega oscilatorja je določena s pomočjo RC vrednosti oscilatorja.

Upor na čipu in kondenzator sta precej velika odstopanja od postopka rezin. S tuningom

efektivna vrednost RC skozi registre, je mogoče zmanjšati frekvenco uro za višje

natančnost.

3.1 Uporabni register Opis

Obstajajo številni registri v sekvenčnih sekvencah. Ta oddelek opisuje

natančneje, funkcijo teh registrov.

REG_TRIM

Trim register REG_TRIM ima 5 veljavnih bitov Trim [4: 0], ki omogoča skupno 32 nastavitev trim. Privzeto

je 0. Če povečate vrednost trimestnega registra, se efektivna vrednost RC oscilatorja zmanjša, tako da

da se ura frekvence ustrezno poveča.

REG_CLOCK

Ta 32-bitni register šteje število glavnih časovnih ciklov FT800 / FT801 od ponastavitve. Z branjem

ta register, gostiteljski MCU lahko izračuna glavno frekvenco ure, ki temelji na točnem časovniku v

MCU.

REG_FREQUENCY

Ta 32-bitni register shrani vrednost trenutne glavne frekvence takta. Programska oprema mora posodobiti

ta register, ko je zaključena ura.

3.2 Postopek obrezovanja

Med močjo na inicializaciji lahko programska oprema obdela notranjo relaksacijsko oscilatorsko uro

želeno vrednost. Ciljna vrednost je 12MHz, tako da bo glavna ura delovala pri 48MHz.

Ko je čip v aktivni način, se bo vklopila notranja ura, PLL, in sistem

glavna ura bo na voljo. REG_CLOCK začne šteti vsak glavni cikel ure. Z branjem

REG_CLOCK dvakrat v definiranem intervalu (tj. 1us glede na MCU uro ali časovnik), glavna ura

frekvenco se lahko izračuna. Če je izmerjena frekvenca nižja od cilja, povečajte

vrednost REG_TRIM. Ponovite to operacijo, dokler izmerjena frekvenca ne doseže +/- 3%

ciljna frekvenca.

3.3 Podrobne zaporedja

Naslednji koraki zagotavljajo podrobno programsko zaporedje, s katero posnemate notranjo uro.

1. Po ponovnem zagonu strojne opreme (vklop ali prilagajanje pinja PD_N) FT800 / FT801 vstopi v STANDBY

način. Ura oscilatorja notranje sprostitve je izbrana kot ura vir PLL.

Vključena sta notranja ura in PLL, vendar je glavna ura do osnovne logike

ugasnjen.

2. Čip nastavite v ACTIVE način, tako da naredite neprekinjeno branje preko vmesnika gostitelja

(SPI ali I2C).

3. Izmerite trenutno frekvenco ure

a. Preberite REG_CLOCK kot t0

b. Zamuda 1us

c. Preberite REG_CLOCK kot t1

d. Izračunajte frekvenco ure f = (t1-t0) / 1us

4. Če je izmerjena frekvenca f manjša od 48 MHz - 3%, registra REG_TRIM povišajte za 1

5. Ponovite koraka 3 in 4, dokler izmerjena frekvenca ne doseže 48 MHz +/- 3% ali

REG_TRIM že doseže največjo vrednost 31 (kar je malo verjetno od obrezovanja

območje je definirano tako, da lahko nastavite uro do cilja)

6. Zapišite končno merjeno frekvenco f na REG_FREQUENCY

Spodaj je koda vzorca C za notranjo obrezovanje ura, ki jo uporablja aplikacija Gameduinuo 2:

/ ************************************************* *******

#define REG_CLOCK 0x102408

uint32_t GDClass :: measure_freq (void)

{

nepodpisana dolga t0 = GDTR.rd32 (REG_CLOCK);

delayMicroseconds (15625);

nepodpisana dolga t1 = GDTR.rd32 (REG_CLOCK);

vrnitev (t1 - t0) <>

}

#define REG_TRIM 0x10256C

#define REG_FREQUENCY 0x10240C

#define LOW_FREQ_BOUND 47040000UL

prazna GDClass :: melodija (void)

{

nepodpisani char i = 0;

uint32_t f;

za (bajt i = 0; (i <31) &&="" ((f="measure_freq" ())="">

GDTR.wr (REG_TRIM, i);

GDTR.wr32 (REG_FREQUENCY, f);

}

Ker se bo REG_TRIM ponastavil na 0 vsakič, ko se zgodi resetiranje strojne opreme, se mora izvesti

sekvenco za obrezovanje ure v začetni rutini ponastavitve.