Calculating Time-Out Values - Freescale Semiconductor MCF52277 Reference Manual

Table of Contents

Advertisement

DMA Timers (DTIM0–DTIM3)
move.l #0x0000,D0;writing to the timer counter with any
move.l DO,TCN0 ;value resets it to zero
move.l #0xAFAF,DO ;set the timer0 reference to be
move.l #D0,TRR0 ;defined as 0xAFAF
The simple example below uses Timer0 to count time-out loops. A time-out occurs when the reference
value, 0xAFAF, is reached.
timer0_ex
clr.l DO
clr.l D1
clr.l D2
move.l #0x0000,D0
move.l D0,TCN0
move.b #0x03,D0
move.b D0,TER0
move.w TMR0,D0
bset #0,D0
move.w D0,TMR0
T0_LOOP
move.b TER0,D1
btst #1,D1
beq T0_LOOP
addi.l #1,D2
cmp.l #5,D2
beq T0_FINISH
move.b #0x02,D0
move.b D0,TER0
jmp T0_LOOP
T0_FINISH
HALT
28.4.2

Calculating Time-Out Values

Equation 28-1
determines time-out periods for various reference values:
Timeout period
=
When calculating time-out periods, add 1 to the prescaler to simplify calculating, because
DTMRn[PS] equals 0x00 yields a prescaler of 1, and DTMRn[PS] equals 0xFF yields a prescaler of 256.
For example, if a 83.33-MHz timer clock is divided by 16, DTMRn[PS] equals 0x7F, and the timer is
referenced at 0x13DC3 (81347 decimal), the time-out period is:
Timeout period
28-10
;reset the counter to 0x0000
;writing ones to TER0[REF,CAP]
;clears the event flags
;save the contents of TMR0 while setting
;the 0 bit. This enables timer 0 and starts counting
;load the value back into the register, setting TMR0[RST]
;load TER0 and see if
;TER0[REF] has been set
;Increment D2
;Did D2 reach 5? (i.e. timer ref has timed)
;If so, end timer0 example. Otherwise jump back.
;writing one to TER0[REF] clears the event flag
;End processing. Example is finished
(
)
×
(
1 clock frequency
1 or 16
1
×
=
16
------------------------ -
6
×
83.3
10
MCF52277 Reference Manual, Rev. 1
)
×
(
)
×
DTMRn[PS]
+
1
×
(
)
×
(
)
127
+
1
81347
+
1
(
)
DTRRn[REF]
+
1
=
2.00 s
Freescale Semiconductor
Eqn. 28-1
Eqn. 28-2

Advertisement

Table of Contents
loading

Table of Contents