+ All Categories
Home > Documents > Timers Chapter 10 9S12DP256. Timers The 9S12DP256 Programmable Timer Output Compares Pulse Train...

Timers Chapter 10 9S12DP256. Timers The 9S12DP256 Programmable Timer Output Compares Pulse Train...

Date post: 19-Dec-2015
Category:
View: 224 times
Download: 0 times
Share this document with a friend
Popular Tags:
31
Timers Chapter 10 9S12DP256
Transcript
Page 1: Timers Chapter 10 9S12DP256. Timers The 9S12DP256 Programmable Timer Output Compares Pulse Train Using Interrupts Input Capture Measuring the Period of.

Timers

Chapter 10

9S12DP256

Page 2: Timers Chapter 10 9S12DP256. Timers The 9S12DP256 Programmable Timer Output Compares Pulse Train Using Interrupts Input Capture Measuring the Period of.

Timers

• The 9S12DP256 Programmable Timer

• Output Compares

• Pulse Train Using Interrupts

• Input Capture

• Measuring the Period of a Pulse Train Using Interrupts

Page 3: Timers Chapter 10 9S12DP256. Timers The 9S12DP256 Programmable Timer Output Compares Pulse Train Using Interrupts Input Capture Measuring the Period of.

PIM_9DP256

Block Diagram

Page 4: Timers Chapter 10 9S12DP256. Timers The 9S12DP256 Programmable Timer Output Compares Pulse Train Using Interrupts Input Capture Measuring the Period of.
Page 5: Timers Chapter 10 9S12DP256. Timers The 9S12DP256 Programmable Timer Output Compares Pulse Train Using Interrupts Input Capture Measuring the Period of.

Table 10.1 Timer Registers in the 9S12DP256 Name Register Addr Description TIOS 0040 Timer Input Capture/Output Compare Select CFORC 0041 Timer Compare Force Register OC7M 0042 Output Compare 7 Mask Register OC7D 0043 Output Compare 7 Data Register TCNT 0044 Timer Count Register TSCR1 0046 Timer System Control Register 1 TCTL1 0048 Timer Control Register 1 TCTL2 0049 Timer Control Register 2 TCTL3 004A Timer Control Register 3 TCTL4 004B Timer Control Register 4 TIE 004C Timer Interrupt Enable Register

TSCR2 004D Timer System Control Register 2 TFLG1 004E Timer Interrupt Flag Register 1 TFLG2 004F Timer Interrupt Flag Register 2 TC0 0050 Timer Input Capture /Output Compare Register 0 TC1 0052 Timer Input Capture /Output Compare Register 1 TC2 0054 Timer Input Capture /Output Compare Register 2 TC3 0056 Timer Input Capture /Output Compare Register 3 TC4 0058 Timer Input Capture /Output Compare Register 4 TC5 005A Timer Input Capture /Output Compare Register 5 TC6 005C Timer Input Capture /Output Compare Register 6 TC7 005E Timer Input Capture /Output Compare Register 7

Page 6: Timers Chapter 10 9S12DP256. Timers The 9S12DP256 Programmable Timer Output Compares Pulse Train Using Interrupts Input Capture Measuring the Period of.

Timer Counter

$0044 Bit 15 14 13 12 11 10 9 Bit 8 TCNT (High) $0045 Bit 7 6 5 4 3 2 1 Bit 0 TCNT (Low)

Free running 16-bit counter Clock input is MCLK (8 MHz) pre-scaled by 1, 2, 4, 8, 16, 32, 64, or 128 according to bits PR2:PR0 in TSCR2

Page 7: Timers Chapter 10 9S12DP256. Timers The 9S12DP256 Programmable Timer Output Compares Pulse Train Using Interrupts Input Capture Measuring the Period of.

Timer System Control Register 1 7 6 5 4 3 2 1 0

$0046 TEN TSWAI TSFRZ TFFCA 0 0 0 0 TSCR1

TEN: Timer Enable 0 – Timer disabled, including the counter 1 – Timer enabled, counter free running

TSWAI: Timer Stops While in Wait 0 – Timer continues to run during wait 1 – Timer disabled when MCU is in the wait mode

TSFRZ: Timer Stops While in Freeze Mode 0 – Timer continues to run while in background mode 1 – Timer disabled when MCU is in freeze mode

TFFCA: Timer Fast Flag Clear All 0 – Normal timer flag clearing 1 – Fast timer flag clearing (see technical data sheet)

Page 8: Timers Chapter 10 9S12DP256. Timers The 9S12DP256 Programmable Timer Output Compares Pulse Train Using Interrupts Input Capture Measuring the Period of.

Setting the timer count time

7 6 5 4 3 2 1 0 $004D TOI 0 0 0 TCRE PR2 PR1 PR0 TSCR2

PR[2:0]: Timer Prescaler Select

PR[1:0] Prescaler 1 count time (MCLK = 8 MHz)

overflow time (MCLK = 8 MHz)

00 0 1 0.125 µs 8.192 ms 00 1 2 0.25 µs 16.384 ms 01 0 4 0.5 µs 32.768 ms 01 1 8 1.0 µs 65.536 ms 10 0 16 2.0 µs 131.07 ms 10 1 32 4.0 µs 262.14 ms 11 0 64 8.0 µs 524.28 ms 11 1 128 16.0 µs 1048.56 ms

PR[2:0] can be read or written anytime.

Page 9: Timers Chapter 10 9S12DP256. Timers The 9S12DP256 Programmable Timer Output Compares Pulse Train Using Interrupts Input Capture Measuring the Period of.

7 6 5 4 3 2 1 0 $004F TOF 0 0 0 0 0 0 0 TFLG2

TOF: Timer Overflow Interrupt Flag 0 – Cleared by writing a 1 to bit position 7 1 – Set to 1 when counter rolls over from $FFFF to $0000

Figure 10.4 The timer overflow interrupt flag is bit 7 of TFLG2

Page 10: Timers Chapter 10 9S12DP256. Timers The 9S12DP256 Programmable Timer Output Compares Pulse Train Using Interrupts Input Capture Measuring the Period of.

PORT T IOC7 IOC6 IOC5 IOC4 IOC3 IOC2 IOC1 IOC0

Pin PT7 PT6 PT5 PT4 PT3 PT2 PT1 PT0

7 6 5 4 3 2 1 0

$0040 IOS7 IOS6 IOS5 IOS4 IOS3 IOS2 IOS1 IOS0 TIOS

IOS[7:0]: Input Capture or Output Compare Channel Designator 0 – The corresponding channel is an input capture 1 – The corresponding channel is an output compare

Figure 10.5 Selecting pins of Port T to be either an input capture or an output compare

Page 11: Timers Chapter 10 9S12DP256. Timers The 9S12DP256 Programmable Timer Output Compares Pulse Train Using Interrupts Input Capture Measuring the Period of.

Timers

• The 9S12DP256 Programmable Timer

• Output Compares

• Pulse Train Using Interrupts

• Input Capture

• Measuring the Period of a Pulse Train Using Interrupts

Page 12: Timers Chapter 10 9S12DP256. Timers The 9S12DP256 Programmable Timer Output Compares Pulse Train Using Interrupts Input Capture Measuring the Period of.

$005y Bit 15 14 13 12 11 10 9 Bit 8 TCx (High) $005y+1 Bit 7 6 5 4 3 2 1 Bit 0 TCx (Low)

Figure 10.8 Timer input capture/output compare register x (y = 2x)

7 6 5 4 3 2 1 0

$004E C7F C6F C5F C4F C3F C2F C1F C0F TFLG1

C0F–C7F: Channel x Flag 0 – Cleared by writing a 1 to corresponding bit position 1 – Set to 1 when counter matches output compare x value

Figure 10.9 The output compare channel flags

Page 13: Timers Chapter 10 9S12DP256. Timers The 9S12DP256 Programmable Timer Output Compares Pulse Train Using Interrupts Input Capture Measuring the Period of.

\ Delay using 9S12DP256 output compare timer functions. File: OC_DELAY.WHP  HEX 0040 CONSTANT TIOS \ Timer Input Cap.\Output Comp. Select 0044 CONSTANT TCNT \ Timer Counter Register 0046 CONSTANT TSCR1 \ Timer System Control Register 1004D CONSTANT TSCR2 \ Timer System Control Register 2 004E CONSTANT TFLG1 \ Timer Interrupt Flag Register 1 005C CONSTANT TC6 \ Timer Output Compare Register 6 \ Use output compare 6 for a 25 msec delay : TIMER.INIT ( -- ) \ Initialize timer 40 TIOS C! \ select output compare 6 32 TSCR2 C! \ div by 4: 2 MHz timer clock 80 TSCR1 C! ; \ enable timer : C6F.CLR ( -- ) \ Clear C6F - bit 6 - in TFLG1 ) 40 TFLG1 C! ;

Page 14: Timers Chapter 10 9S12DP256. Timers The 9S12DP256 Programmable Timer Output Compares Pulse Train Using Interrupts Input Capture Measuring the Period of.

 DECIMAL : 25.MSEC ( cnt -- cnt' ) \ wait 25 msec. 50000 + \ add 50000 to prev cnt DUP TC6 ! \ store in output compare 6 reg C6F.CLR \ clear output compare 6 flag BEGIN \ wait for timeout 6 TFLG1 ?HI UNTIL ; : S.DELAY ( n -- ) \ delay n seconds TIMER.INIT 40 * \ no. of 25.msec delays TCNT @ SWAP \ cnt # FOR 25.MSEC NEXT DROP ; 

Page 15: Timers Chapter 10 9S12DP256. Timers The 9S12DP256 Programmable Timer Output Compares Pulse Train Using Interrupts Input Capture Measuring the Period of.

Pulse Train Example

TC6 match

TC7 match

PERIOD P_WIDTH

Page 16: Timers Chapter 10 9S12DP256. Timers The 9S12DP256 Programmable Timer Output Compares Pulse Train Using Interrupts Input Capture Measuring the Period of.

7 6 5 4 3 2 1 0

$0042 OC7M7 OC7M6 OC7M5 OC7M4 OC7M3 OC7M2 OC7M1 OC7M0 OC7M

OC7M7–OC7M0: Output Compare 7 Masks 0 – TC7 is disabled for the corresponding port T pin 1 – TC7 is enabled to control the corresponding port T pin

7 6 5 4 3 2 1 0

$0043 OC7D7 OC7D6 OC7D5 OC7D4 OC7D3 OC7D2 OC7D1 OC7D0 OC7D

If OC7Mx is set, data in OC7Dx is output to port T, bit x on successful TC7 compares.

7 6 5 4 3 2 1 0

$0048 OM7 OL7 OM6 OL6 OM5 OL5 OM4 OL4 TCTL1

7 6 5 4 3 2 1 0 $0049 OM3 OL3 OM2 OL2 OM1 OL1 OM0 OL0 TCTL2

OM[0:7]: Output Mode OL[0:7]: Output Level

OMx OLx Action taken on successful TCx compare 0 0 Timer disconnected from output pin logic 0 1 Toggle OCx output line 1 0 Clear OCx output line to 0 1 1 Set OCx output line to 1

Figure 10.10 Additional registers used for output compares

Page 17: Timers Chapter 10 9S12DP256. Timers The 9S12DP256 Programmable Timer Output Compares Pulse Train Using Interrupts Input Capture Measuring the Period of.

\ Pulse train using output compares 7 and 6. File: PULSE.WHPHEX 0040 CONSTANT TIOS \ Timer Input Cap.\Output Comp. Select 0042 CONSTANT OC7M \ Output Compare 7 Mask Register 0043 CONSTANT OC7D \ Output Compare 7 Data Register 0044 CONSTANT TCNT \ Timer Counter Register 0046 CONSTANT TSCR1 \ Timer System Control Register 10048 CONSTANT TCTL1 \ Timer Control Register 1 004D CONSTANT TSCR2 \ Timer System Control Register 2 004E CONSTANT TFLG1 \ Timer Interrupt Flag Register 1 005C CONSTANT TC6 \ Timer Output Compare Register 6005E CONSTANT TC7 \ Timer Output Compare Register 7 DECIMALVARIABLE P_WIDTH 6625 P_WIDTH !VARIABLE PERIOD 17500 PERIOD !HEX : TINIT ( -- ) C0 TIOS C! \ select output compares 6 & 7 02 TSCR2 C! \ div by 4: 2 MHz timer clock 80 TSCR1 C! \ enable timer TCNT @ DUP TC6 ! TC7 ! \ init cnt in TC6 & TC7 6 OC7M HI \ pulse train out PT6 6 OC7D LO \ PT6 goes low on TC7 match 4 TCTL1 HI 5 TCTL1 HI ; \ set PT6 high on TC6 match

Page 18: Timers Chapter 10 9S12DP256. Timers The 9S12DP256 Programmable Timer Output Compares Pulse Train Using Interrupts Input Capture Measuring the Period of.

 : CLR.C76 ( -- ) \ clear both C7F and C6F C0 TFLG1 C! ; : PULSE ( -- ) TINIT BEGIN TC7 @ CLR.C76 PERIOD @ + DUP TC7 ! \ TC7new = TC7old + PERIOD P_WIDTH @ + TC6 ! \ TC6 = TC7new + P_WIDTH BEGIN \ wait for PT6 to go low on 6 TFLG1 ?HI \ TC7 match and the high on UNTIL \ TC6 match AGAIN ; DECIMAL 

Page 19: Timers Chapter 10 9S12DP256. Timers The 9S12DP256 Programmable Timer Output Compares Pulse Train Using Interrupts Input Capture Measuring the Period of.

Timers

• The 9S12DP256 Programmable Timer

• Output Compares

• Pulse Train Using Interrupts

• Input Capture

• Measuring the Period of a Pulse Train Using Interrupts

Page 20: Timers Chapter 10 9S12DP256. Timers The 9S12DP256 Programmable Timer Output Compares Pulse Train Using Interrupts Input Capture Measuring the Period of.

Pulse Train

TC6 match

TC7 match

PERIOD P_WIDTH

Page 21: Timers Chapter 10 9S12DP256. Timers The 9S12DP256 Programmable Timer Output Compares Pulse Train Using Interrupts Input Capture Measuring the Period of.

7 6 5 4 3 2 1 0 $004C C7I C6I C5I C4I C3I C2I C1I C0I TIE

CxI: Input Capture/Output Compare "x" Interrupt enable 0 – Interrupt disabled 1 – Interrupt enabled

7 6 5 4 3 2 1 0

$004D TOI 0 0 0 TCRE PR2 PR1 PR0 TSCR2

TOI: Timer Overflow Interrupt Enable 0 – Timer overflow interrupt disabled 1 – Timer overflow interrupt enabled

Figure 10.22 Enabling timer interrupts

Page 22: Timers Chapter 10 9S12DP256. Timers The 9S12DP256 Programmable Timer Output Compares Pulse Train Using Interrupts Input Capture Measuring the Period of.

\ Pulse train using output compares 7 and 6. File: PULSEI.WHPHEX 0040 CONSTANT TIOS \ Timer Input Cap.\Output Comp. Select 0042 CONSTANT OC7M \ Output Compare 7 Mask Register 0043 CONSTANT OC7D \ Output Compare 7 Data Register 0044 CONSTANT TCNT \ Timer Counter Register 0046 CONSTANT TSCR1 \ Timer System Control Register 1 0048 CONSTANT TCTL1 \ Timer Control Register 1 004C CONSTANT TIE \ Timer Interrupt Enable Register 1 004D CONSTANT TSCR2 \ Timer System Control Register 2 004E CONSTANT TFLG1 \ Timer Interrupt Flag Register 1 005C CONSTANT TC6 \ Timer Output Compare Register 6005E CONSTANT TC7 \ Timer Output Compare Register 73FE2 CONSTANT TC6.IVEC \ Timer Channel 6 interrupt vector DECIMALVARIABLE P_WIDTH 6625 P_WIDTH !VARIABLE PERIOD 17500 PERIOD !HEX : TINIT ( -- ) C0 TIOS C! \ select output compares 6 & 7 00 TSCR2 C! \ div by 1: 8 MHz timer clock 80 TSCR1 C! \ enable timer TCNT @ DUP TC6 ! TC7 ! \ init cnt in TC6 & TC7 6 OC7M HI \ pulse train out PT6 6 OC7D LO \ PT6 goes low on TC7 match 4 TCTL1 HI 5 TCTL1 HI \ set PT6 high on TC6 match 40 TIE C! ; \ enable TC6 interrupts

Page 23: Timers Chapter 10 9S12DP256. Timers The 9S12DP256 Programmable Timer Output Compares Pulse Train Using Interrupts Input Capture Measuring the Period of.

 : CLR.C76 ( -- ) \ clear both C7F and C6F C0 TFLG1 C! ; INT: TC6.INTSER ( -- ) TC7 @ PERIOD @ + DUP TC7 ! \ TC7new = TC7old + PERIOD P_WIDTH @ + TC6 ! \ TC6new = TC7new + P_WIDTH CLR.C76RTI; : SET.TC6.INTVEC ( -- ) [ ' TC6.INTSER ] LITERAL TC6.IVEC ! ; : PULSEI ( -- ) SEI TINIT SET.TC6.INTVEC CLI ; DECIMAL

Page 24: Timers Chapter 10 9S12DP256. Timers The 9S12DP256 Programmable Timer Output Compares Pulse Train Using Interrupts Input Capture Measuring the Period of.

Timers

• The 9S12DP256 Programmable Timer

• Output Compares

• Pulse Train Using Interrupts

• Input Capture

• Measuring the Period of a Pulse Train Using Interrupts

Page 25: Timers Chapter 10 9S12DP256. Timers The 9S12DP256 Programmable Timer Output Compares Pulse Train Using Interrupts Input Capture Measuring the Period of.

Input Capture 7 6 5 4 3 2 1 0

$004E C7F C6F C5F C4F C3F C2F C1F C0F TFLG1

C0F–C7F: Channel x Flag 0 – Cleared by writing a 1 to corresponding bit position 1 – Set each time a selected active edge is detected on the ICx input line

7 6 5 4 3 2 1 0

$004A EDG7B EDG7A EDG6B EDG6A EDG5B EDG5A EDG4B EDG4A TCTL3

7 6 5 4 3 2 1 0 $004B EDG3B EDG3A EDG2B EDG2A EDG1B EDG1A EDG0B EDG0A TCTL4

EDGxB, EDGxA: Input Capture Edge Control

EDGxB EDGxA Configuration 0 0 Capture disabled 0 1 Capture on rising edges only 1 0 Capture on falling edges only 1 1 Capture on any edge (rising or falling)

Figure 10.13 Registers used for input capture

Page 26: Timers Chapter 10 9S12DP256. Timers The 9S12DP256 Programmable Timer Output Compares Pulse Train Using Interrupts Input Capture Measuring the Period of.

\ Use input capture to measure width of single pulse. File: PWIDTH.WHP\ Polling mode -- no interrupts\ Use TC2 -- signal on PT2HEX 0040 CONSTANT TIOS \ Timer Input Cap.\Output Comp. Select 0044 CONSTANT TCNT \ Timer Counter Register 0046 CONSTANT TSCR1 \ Timer System Control Register 1004B CONSTANT TCTL4 \ Timer Control Register 4 004D CONSTANT TSCR2 \ Timer System Control Register 2 004E CONSTANT TFLG1 \ Timer Interrupt Flag Register 1 0054 CONSTANT TC2 \ Timer Input Capture Register 2  : TIC.INIT ( -- ) 0 TIOS C! \ select all input captures 0 TSCR2 C! \ div by 1: 8 MHz timer clock 80 TSCR1 C! ; \ enable timer

Page 27: Timers Chapter 10 9S12DP256. Timers The 9S12DP256 Programmable Timer Output Compares Pulse Train Using Interrupts Input Capture Measuring the Period of.

 : PULSE.WIDTH ( -- n ) \ Measure width n of pulse TIC.INIT \ initialize timer input capture 5 TCTL4 LO \ capture on rising edge 4 TCTL4 HI 04 TFLG1 C! \ clear C2F flag BEGIN 2 TFLG1 ?HI \ wait for rising edge UNTIL TC2 @ \ t1 04 TFLG1 C! \ clear C2F flag 5 TCTL4 HI \ capture on falling edge 4 TCTL4 LO BEGIN 2 TFLG1 ?HI \ wait for falling edge UNTIL TC2 @ \ t1 t2 04 TFLG1 C! \ clear C2F flag SWAP - ; \ width = (t2 - t1) DECIMAL 

Page 28: Timers Chapter 10 9S12DP256. Timers The 9S12DP256 Programmable Timer Output Compares Pulse Train Using Interrupts Input Capture Measuring the Period of.

Timers

• The 9S12DP256 Programmable Timer

• Output Compares

• Pulse Train Using Interrupts

• Input Capture

• Measuring the Period of a Pulse Train Using Interrupts

Page 29: Timers Chapter 10 9S12DP256. Timers The 9S12DP256 Programmable Timer Output Compares Pulse Train Using Interrupts Input Capture Measuring the Period of.

\ Measuring the period of a pulse train. File: PERIOD.WHPHEX0040 CONSTANT TIOS \ Timer Input Cap.\Output Comp. Select 0044 CONSTANT TCNT \ Timer Counter Register 0046 CONSTANT TSCR1 \ Timer System Control Register 1 004B CONSTANT TCTL4 \ Timer Control Register 4 004C CONSTANT TIE \ Timer Interrupt Enable Register004D CONSTANT TSCR2 \ Timer System Control Register 2 004E CONSTANT TFLG1 \ Timer Interrupt Flag Register 1 004F CONSTANT TFLG2 \ Timer Interrupt Flag Register 2 0052 CONSTANT TC1 \ Timer Input Capture Register 13FEC CONSTANT TC1.IVEC \ Timer Channel 1 interrupt vector3FDE CONSTANT TOF.IVEC \ Timer overflow flag interrupt vector VARIABLE OVCNT \ timer overflow countVARIABLE OVCNT.OLD \ old timer overflow countVARIABLE TC1.OLD \ old TC1VARIABLE DPERIOD 2 VALLOT \ double word period dH dL : INIT.IC ( -- )

C0 TIOS C! \ select input capture 100 TSCR2 C! \ div by 1: 8 MHz timer clock80 TSCR1 C! \ enable timer3 TCTL4 LO 2 TCTL4 HI \ rising edge of TC102 TFLG1 C! \ clear any old flags80 TFLG2 C! \ clear TOI flag7 TSCR2 HI \ enable TOI interrupt1 TIE HI ; \ enable TC1 interrupt

Page 30: Timers Chapter 10 9S12DP256. Timers The 9S12DP256 Programmable Timer Output Compares Pulse Train Using Interrupts Input Capture Measuring the Period of.

\ Timer overflow interrupt routineINT: TOF.INTSER ( -- )

1 OVCNT +! \ inc OVCNT80 TFLG2 C! \ clear TOF

RTI;

\ Input capture 1 interrupt routineINT: TC1.INTSER ( -- )

TC1.OLD @ OVCNT.OLD @ \ ic.o ov.oTC1 @ DUP TC1.OLD ! \ ic.o ov.o icOVCNT @ DUP OVCNT.OLD ! \ ic.o ov.o ic ov2SWAP D- \ spL spHDPERIOD 2! \ store period in DPERIOD02 TFLG1 C! \ clear C1F

RTI; \ Set interrupt vectors: SET.TOF.INTVEC ( -- )

[ ' TOF.INTSER ] LITERAL TOF.IVEC ! ;  : SET.TC1.INTVEC ( -- )

[ ' TC1.INTSER ] LITERAL TC1.IVEC ! ; 

Page 31: Timers Chapter 10 9S12DP256. Timers The 9S12DP256 Programmable Timer Output Compares Pulse Train Using Interrupts Input Capture Measuring the Period of.

 \ Main program: MAIN ( -- )

SEI \ set interrupt flagSET.TOF.INTVEC \ set interrupt vectorsSET.TC1.INTVECINIT.IC \ init input captureCLI ; \ clear interrupt flag

 DECIMAL 


Recommended