Tema: Re: Atmega ir ciklai
Autorius: saimhe
Data: 2010-02-06 21:09:56
> kaip jame įgyvendinti duomenų perdavimą kad ir per UART'ą, kad duomenų gavimo metu minėtas ciklas nebūtų "užstabdytas"?

   AVR dar neturėjau progos įsisavinti, daug dirbau tik su 8052, bet
nemanau, kad UART'ai iš esmės skiriasi.
   Taigi aname būdavo taip, kad rašai į UART duomenų registrą ir tikrini,
ar jau visi bitai nuvažiavo; arba priešingai -- prieš įrašant tikrini, ar
ankstesnis baitas jau išsiųstas. Iš anksto žinant, kad pauzės tarp baitų
labai didelės, galima ir netikrinti. Realiai galima išspausti greitį apie
bps/10 (arba /11, jei režimas su parity). Pavyzdžiui, 11520 baitų per
sekundę. O jei leidžia kvarcas bei dalikliai, tai ir dar daugiau. Be to,
ryšiui tarp dviejų kontrolerių (skirtingai nuo kontroleris<->PC) didesnis
bps pasirinkimas, nes nebūtini "standartiniai" greičiai. Datasheet'uose
viskas aprašyta.
   Todėl pakanka "nuskaityk-tikrink" sukti reikiamu greičiu ir, pasiekus
ieškomą slenkstį, įrašyti atitinkamą konstantą į UART. Jei ADC savaime
garantuotai lėtesnis už UART, arba samplinimo dažnis atitinkamai žemas,
tai įrašinėti galima aklai. Jei ne, atsiras papildomų sąlygų: galbūt UART
užstabdymo metu svarbiausia, kad būtų aptiktas ir praneštas aukštesnis
slenkstis (tegul žemesnio slenksčio indikacija prarandama, juolab kad
vėluoja). Vienu žodžiu, po slenksčio aptikimo įrašoma į UART, bet su sąlyga,
kad šiuo metu baitas nesiunčiamas. Pertraukimus realizuojant asembleriu,
beveik visus vėlavimus galima pasiskaičiuoti takto tikslumu.

-- 
  saimhe