Chapter 17 Periodic Interrupt Timer (S12PIT24B8CV2)
MC9S12XE-Family Reference Manual , Rev. 1.21
672
Freescale Semiconductor
Because of an order from the United States International Trade Commission, BGA-packaged product lines and partnumbers
indicated here currently are not available from Freescale for import or sale in the United States prior to September 2010
17.5
Initialization
17.5.1
Startup
Set the conguration registers before the PITE bit in the PITCFLMT register is set. Before PITE is set, the
conguration registers can be written in arbitrary order.
17.5.2
Shutdown
When the PITCE register bits, the PITINTE register bits or the PITE bit in the PITCFLMT register are
cleared, the corresponding PIT interrupt ags are cleared. In case of a pending PIT interrupt request, a
spurious interrupt can be generated. Two strategies, which avoid spurious interrupts, are recommended:
1. Reset the PIT interrupt ags only in an ISR. When entering the ISR, the I mask bit in the CCR is
set automatically. The I mask bit must not be cleared before the PIT interrupt ags are cleared.
2. After setting the I mask bit with the SEI instruction, the PIT interrupt ags can be cleared. Then
clear the I mask bit with the CLI instruction to re-enable interrupts.
17.5.3
Flag Clearing
A ag is cleared by writing a one to the ag bit. Always use store or move instructions to write a one in
certain bit positions. Do not use the BSET instructions. Do not use any C-constructs that compile to BSET
instructions. “BSET ag_register, #mask” must not be used for ag clearing because BSET is a read-
modify-write instruction which writes back the “bit-wise or” of the ag_register and the mask into the
ag_register. BSET would clear all ag bits that were set, independent from the mask.
For example, to clear ag bit 0 use: MOVB #$01,PITTF.
17.6
Application Information
To get started quickly with the PIT24B8C module this section provides a small code example how to use
the block. Please note that the example provided is only one specic case out of the possible congurations
and implementations.
Functionality: Generate an PIT interrupt on channel 0 every 500 PIT clock cycles.
ORG
CODESTART
; place the program into specic
; range (to be selected)
LDS
RAMEND
; load stack pointer to top of RAM
MOVW
#CH0_ISR,VEC_PIT_CH0 ; Change value of channel 0 ISR adr
; ******************** Start PIT Initialization *******************************************************
CLR
PITCFLMT
; disable PIT
MOVB
#$01,PITCE
; enable timer channel 0
CLR
PITMUX
; ch0 connected to micro timer 0
MOVB
#$63,PITMTLD0
; micro time base 0 equals 100 clock cycles
MOVW
#$0004,PITLD0
; time base 0 eq. 5 micro time bases 0 =5*100 = 500