1 /** ###################################################################
2 ** THIS BEAN MODULE IS GENERATED BY THE TOOL. DO NOT MODIFY IT.
3 ** Filename : TickTimer.C
5 ** Processor : MC9S12C32CFU
7 ** Version : Bean 02.063, Driver 01.05, CPU db: 2.87.276
8 ** Compiler : Metrowerks HC12 C Compiler
9 ** Date/Time : 18/06/2005, 17:53
11 ** This bean "TimerInt" implements a periodic interrupt.
12 ** When the bean and its events are enabled, the "OnInterrupt"
13 ** event is called periodically with the period that you specify.
14 ** TimerInt supports also changing the period in runtime.
15 ** The source of periodic interrupt can be timer compare or reload
16 ** register or timer-overflow interrupt (of free running counter).
18 ** Timer name : TIM (16-bit)
20 ** Counter shared : No
22 ** High-speed CPU mode
23 ** Prescaler : divide-by-4
25 ** Initial period/frequency
27 ** microseconds : 1000
29 ** seconds (real) : 0.0010000
33 ** Runtime setting : period/frequency interval (continual setting)
34 ** ticks : 16000 to 160000 ticks
35 ** microseconds : 1000 to 10000 microseconds
36 ** milliseconds : 1 to 10 milliseconds
37 ** seconds (real) : 0.0010000 to 0.0100000 seconds
38 ** Hz : 100 to 1000 Hz
45 ** Counter : TCNT [68]
48 ** Prescaler : TSCR2 [77]
53 ** Flip-flop registers
56 ** Enable - byte TickTimer_Enable(void);
57 ** SetFreqHz - byte TickTimer_SetFreqHz(word Freq);
59 ** (c) Copyright UNIS, spol. s r.o. 1997-2002
64 ** http : www.processorexpert.com
65 ** mail : info@processorexpert.com
66 ** ###################################################################*/
69 /* MODULE TickTimer. */
72 #include "TickTimer.h"
74 /* Definition of DATA and CODE segments for this bean. User can specify where
75 these segments will be located on "Build options" tab of the selected CPU bean. */
76 #pragma DATA_SEG TickTimer_DATA /* Data section for this module. */
77 #pragma CODE_SEG TickTimer_CODE /* Code section for this module. */
79 static bool EnUser; /* Enable/Disable device by user */
80 static word CmpHighVal; /* Compare register value for high speed CPU mode */
84 ** ===================================================================
85 ** Method : SetCV (bean TimerInt)
88 ** This method is internal. It is used by Processor Expert
90 ** ===================================================================
92 static void SetCV(word Val)
94 if (Val == 0) /* If the given value is zero */
95 Val = 65535; /* then change it to the maximal one */
96 TC0 = Val; /* Store given value to the compare register */
97 TC7 = Val; /* Store given value to the modulo register */
101 ** ===================================================================
102 ** Method : SetPV (bean TimerInt)
105 ** This method is internal. It is used by Processor Expert
107 ** ===================================================================
109 static void SetPV(byte Val)
111 TSCR2_PR = Val; /* Store given value to the prescaler */
115 ** ===================================================================
116 ** Method : HWEnDi (bean TimerInt)
119 ** This method is internal. It is used by Processor Expert
121 ** ===================================================================
123 static void HWEnDi(void)
125 if (EnUser) { /* Enable device? */
126 TFLG1 = 1; /* Reset interrupt request flag */
127 TIE_C0I = 1; /* Enable interrupt */
129 else { /* Disable device? */
130 TIE_C0I = 0; /* Disable interrupt */
135 ** ===================================================================
136 ** Method : TickTimer_Enable (bean TimerInt)
139 ** Enable the bean - it starts the timer. Events may be
140 ** generated ("DisableEvent"/"EnableEvent").
143 ** --- - Error code, possible codes:
145 ** ERR_SPEED - This device does not work in
146 ** the active speed mode
147 ** ===================================================================
149 byte TickTimer_Enable(void)
151 if (!EnUser) { /* Is the device disabled by user? */
152 EnUser = TRUE; /* If yes then set the flag "device enabled" */
153 HWEnDi(); /* Enable the device */
155 return ERR_OK; /* OK */
159 ** ===================================================================
160 ** Method : TickTimer_SetFreqHz (bean TimerInt)
163 ** This method sets the new frequency of the generated
164 ** events. The frequency is expressed in Hz as a 16-bit
165 ** unsigned integer number.
166 ** This method is available only if runtime setting type
167 ** 'from interval' is selected in the Timing dialog box in
168 ** Runtime setting area.
170 ** NAME - DESCRIPTION
171 ** Freq - Frequency to set [in Hz]
174 ** --- - Error code, possible codes:
176 ** ERR_SPEED - This device does not work in
177 ** the active speed mode
178 ** ERR_MATH - Overflow during evaluation
179 ** ERR_RANGE - Parameter out of range
180 ** ===================================================================
182 byte TickTimer_SetFreqHz(word Freq)
184 dlong rtval; /* Result of two 32-bit numbers division */
185 word rtword; /* Result of 64-bit number division */
187 if ((Freq > 1000) || (Freq < 100)) /* Is the given value out of range? */
188 return ERR_RANGE; /* If yes then error */
189 rtval[1] = 1535744000 / (dword)Freq; /* Divide high speed CPU mode coefficient by the given value */
190 rtval[0] = 0; /* Convert result to the type dlong */
191 if (PE_Timer_LngHi1(rtval[0],rtval[1],&rtword)) /* Is the result greater or equal than 65536 ? */
192 rtword = 65535; /* If yes then use maximal possible value */
193 CmpHighVal = rtword; /* Store result (compare register value for high speed CPU mode) to the variable CmpHighVal */
194 SetCV(CmpHighVal); /* Store appropriate value to the compare register according to the selected high speed CPU mode */
195 return ERR_OK; /* OK */
199 ** ===================================================================
200 ** Method : TickTimer_Init (bean TimerInt)
203 ** This method is internal. It is used by Processor Expert
205 ** ===================================================================
207 void TickTimer_Init(void)
209 CmpHighVal = 5999; /* Compare register value for high speed CPU mode */
210 EnUser = FALSE; /* Disable device */
211 SetCV(CmpHighVal); /* Store appropriate value to the compare register according to the selected high speed CPU mode */
212 SetPV(2); /* Set prescaler register according to the selected high speed CPU mode */
213 HWEnDi(); /* Enable/disable device according to status flags */
217 ** ===================================================================
218 ** Method : TickTimer_Interrupt (bean TimerInt)
221 ** This method is internal. It is used by Processor Expert
223 ** ===================================================================
225 #pragma CODE_SEG __NEAR_SEG NON_BANKED /* Interrupt section for this module. Placement will be in NON_BANKED area. */
226 __interrupt void TickTimer_Interrupt(void)
228 TFLG1 = 1; /* Reset interrupt request flag */
229 vTaskTickInterrupt(); /* Invoke user event */
232 #pragma CODE_SEG TickTimer_CODE /* Code section for this module. */
237 ** ###################################################################
239 ** This file was created by UNIS Processor Expert 03.33 for
240 ** the Motorola HCS12 series of microcontrollers.
242 ** ###################################################################