Ingo Electronics


    HOME                                                           Stellaris LM4F120 LaunchPad


Stellaris LM4F120  LaunchPad.    Timers.

Stellaris Launchpad plokštėje esantis mikrokontroleris turi 12 taimerių modulių, kurių kiekvienas turi po du taimerius TIMER_A ir  TIMER_B

Jie gali dirbti atskirai po vieną, arba bendrai, kaip vienas taimeris. Šešių taimerių moduliai TIMER_A ir TIMER_B yra 16 bitų, o kitų šešių TIMER_A ir TIMER_B moduliai yra 32 bitų.

Kai taimerio modulis sukonfiguruotas taip, kad TIMER_A  ir  TIMER_B moduliai dirbtų bendrai, tuomet turime vieną 32 arba 64 bitų taimerį, kuris programuojant vadinamas kaip TIMER_A

Visų, žemiau tekste pavartotų funkcijų vardus ir parametrų reikšmes galima rasti atsidarius Code Composer Studio timer.h failą !!! 
//******************************************************************************************************************************

Taimerio darbo režimai gali būti šie:

One-Shot    -        vieno kadro

Periodic       -        periodiškas

RTC            -        realaus laiko

Edge Count  -        signalo impulsų skaitiklis

Edge Time    -        signalo ilgio skaitiklis

PWM           -        impulsų plotis

Režimuose One-Shot , Periodic, Edge Count, Edge Time taimeris gali dirbti skaitliuką sukdamas į viršų (UP) arba žemyn (DOWN).  Kai yra nustatomas režimas UP, taimerio skaitiklis pradeda dirbti nuo 0x00 iki pilno užpildymo arba iki prieš tai nustatytos reikšmės, kuri įvedama funkcijomis  TimerLoadSet ir TimerPrescaleSet (16bitų modulis)  arba TimerLoadSet64 ir TimerPrescaleSet (32bitų modulis)

Kai yra nustatytas režimas DOWN, taimerio skaitiklis pradeda dirbti režimu žemyn nuo prieš tai nustatytos reikšmės, kuri buvo įvesta prieš tai išvardintomis funkcijomis iki 0x00 .

Nėra didelio skirtumo tarp režimų UP ir DOWN, todėl šių režimų pasirinkimas priklauso nuo programuotojo pasirinkto algoritmo.   
//******************************************************************************************************************************

Kiekvienas taimerio modulis papildomai turi taip vadinamą Prescaler..

Prescaler nėra įprastas dažnio daliklis. (išskyrus režimą Periodic/One-Shot DOWN) 

Tai lengviau suprasti, pagal žemiau esantį paveikslėlį, kur pavaizduotas 16 bitų taimeris su 8 bitų Prescaler:

timer_prescaler

Kaip matome, į Prescaler, įrašius  0x01, taimerio starto arba stabdymo pradinė įvesta reikšmė tampa:

0b00000001 00000000 00000000 = 65536

Kaip jau buvo minėta, aukščiau parodyta taimerio Prescaler konfiguracija negalioja, kai taimeris nustatomas dirbti Periodic/One-Shot DOWN režimui , tuomet Prescaler dirba kaip įprastas 8bitų dažnio daliklis.

Prescaler gali būti naudojamas tik kai TIMER_A ir TIMER_B moduliai dirba atskirai po vieną.

Prescaler reikšmė įvedama naudojant funkciją TimerPrescaleSet (16 ir 32bitų moduliams)

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

Taimerio einamąją reikšmę bet kuriuo momentu galime nuskaityti panaudoję funkcijas:  

TimerValueGet   arba TimerValueGet64 

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

Reikia atminti, kad jeigu yra naudojamas Prescaler, tai su funkcija TimerValueGet gauta reikšmė yra yra 24 bitų, t.y pridedama ir Prescaler reikšmė, kaip kad parodyta formulėje:

Timer16bit_Value_Get = (Prescaler8bit<<16)+Timer16bit

Arba 32 bitų taimeriui, su funkcija TimerValueGet64 gauta reikšmė yra 48 bitų:

Timer32bit_Value_Get = (Prescaler16bit<<32)+Timer32bit

Norint atskirai gauti einamają Prescaler reikšmę, yra naudojama funkcija:  TimerPrescaleGet

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

Išskirtiniame režime, Periodic/One-Shot DOWN, gauta taimerio einamoji reikšmė nebepriklauso nuo Prescaler reikšmės, nes Prescaler tuomet yra tik kaip dažnio daliklis, o ne rašomas/skaitomas registras. 

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

Visus 12 taimerių modulių, arba kelis iš jų galima sujungti į taip vadinamą grandinę (angl. Daisy Chain), tai gali būti naudojama ilgesniams laiko išlaikymams.

Tam kad taimeris būtų tokiame režime, taimerio konfiguracijoje yra naudojama funkcija:  TimerControlWaitOnTrigger

Apie tai galima plačiau pasiskaityti mikrokontrolerio LM4F120H5QR pdf aprašyme.

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