Initial import
[avr_bc100.git] / BaseTinyFirmware / IAR / Debug / List / time.lst
1 ###############################################################################\r
2 #                                                                             #\r
3 # IAR Atmel AVR C/C++ Compiler V4.30F/W32               12/Mar/2008  23:01:40 #\r
4 # Copyright 1996-2007 IAR Systems. All rights reserved.                       #\r
5 #                                                                             #\r
6 #    Source file  =  C:\home\kevin\pub\src\bc100_cal\IAR\time.c               #\r
7 #    Command line =  C:\home\kevin\pub\src\bc100_cal\IAR\time.c               #\r
8 #                    --cpu=tiny861 -ms -o C:\home\kevin\pub\src\bc100_cal\IAR #\r
9 #                    \Debug\Obj\ -lC C:\home\kevin\pub\src\bc100_cal\IAR\Debu #\r
10 #                    g\List\ -lB C:\home\kevin\pub\src\bc100_cal\IAR\Debug\Li #\r
11 #                    st\ --initializers_in_flash -z2 --no_cse --no_inline     #\r
12 #                    --no_code_motion --no_cross_call --no_clustering         #\r
13 #                    --no_tbaa --debug -DENABLE_BIT_DEFINITIONS -e            #\r
14 #                    --require_prototypes -I "C:\Program Files\IAR            #\r
15 #                    Systems\Embedded Workbench 4.0\avr\INC\" -I "C:\Program  #\r
16 #                    Files\IAR Systems\Embedded Workbench 4.0\avr\INC\CLIB\"  #\r
17 #                    --eeprom_size 512                                        #\r
18 #    List file    =  C:\home\kevin\pub\src\bc100_cal\IAR\Debug\List\time.lst  #\r
19 #    Object file  =  C:\home\kevin\pub\src\bc100_cal\IAR\Debug\Obj\time.r90   #\r
20 #                                                                             #\r
21 #                                                                             #\r
22 ###############################################################################\r
23 \r
24 C:\home\kevin\pub\src\bc100_cal\IAR\time.c\r
25       1          /* This file has been prepared for Doxygen automatic documentation generation.*/\r
26       2          /*! \file *********************************************************************\r
27       3           *\r
28       4           * \brief\r
29       5           *      Functions for timing\r
30       6           *\r
31       7           *      Contains functions to initialize, set, poll and stop timers.\r
32       8           *\r
33       9           * \par Application note:\r
34      10           *      AVR458: Charging Li-Ion Batteries with BC100 \n\r
35      11           *      AVR463: Charging NiMH Batteries with BC100\r
36      12           *\r
37      13           * \par Documentation\r
38      14           *      For comprehensive code documentation, supported compilers, compiler \r
39      15           *      settings and supported devices see readme.html\r
40      16           *\r
41      17           * \author\r
42      18           *      Atmel Corporation: http://www.atmel.com \n\r
43      19           *      Support email: avr@atmel.com\r
44      20           *\r
45      21           * \r
46      22           * $Name$\r
47      23           * $Revision: 2299 $\r
48      24           * $RCSfile$\r
49      25           * $URL: http://svn.norway.atmel.com/AppsAVR8/avr458_Charging_Li-Ion_Batteries_with_BC100/tag/20070904_release_1.0/code/IAR/time.c $\r
50      26           * $Date: 2007-08-23 12:55:51 +0200 (to, 23 aug 2007) $\n\r
51      27           ******************************************************************************/\r
52      28          \r
53      29          #include <ioavr.h>\r
54 \r
55    \                                 In  segment ABSOLUTE, at 0x59\r
56    \   <unnamed> volatile __io _A_TIMSK\r
57    \                     _A_TIMSK:\r
58    \   00000000                      DS 1\r
59 \r
60    \                                 In  segment ABSOLUTE, at 0x53\r
61    \   <unnamed> volatile __io _A_TCCR0B\r
62    \                     _A_TCCR0B:\r
63    \   00000000                      DS 1\r
64 \r
65    \                                 In  segment ABSOLUTE, at 0x35\r
66    \   <unnamed> volatile __io _A_TCCR0A\r
67    \                     _A_TCCR0A:\r
68    \   00000000                      DS 1\r
69 \r
70    \                                 In  segment ABSOLUTE, at 0x33\r
71    \   <unnamed> volatile __io _A_OCR0A\r
72    \                     _A_OCR0A:\r
73    \   00000000                      DS 1\r
74 \r
75    \                                 In  segment ABSOLUTE, at 0x32\r
76    \   <unnamed> volatile __io _A_OCR0B\r
77    \                     _A_OCR0B:\r
78    \   00000000                      DS 1\r
79      30          #include <inavr.h>\r
80      31          \r
81      32          #include "enums.h"\r
82      33          \r
83      34          #include "main.h"\r
84      35          #include "time.h"\r
85      36          \r
86      37          \r
87      38          //******************************************************************************\r
88      39          // Variables\r
89      40          //******************************************************************************\r
90 \r
91    \                                 In  segment NEAR_Z, align 1, keep-with-next\r
92    \   00000000                      REQUIRE `?<Segment init: NEAR_Z>`\r
93      41          unsigned long timeval[TIMERS];  //!< Contains the values for each timer.\r
94    \                     timeval:\r
95    \   00000000                      DS 16\r
96      42          \r
97      43          // timer runs at 1 MHz and overflow will occur every 255 / 1 Mz ~= 0.25 ms \r
98      44          //#pragma vector = TIM0_OVF_vect\r
99      45          \r
100      46          \r
101      47          //******************************************************************************\r
102      48          // Functions\r
103      49          //******************************************************************************\r
104      50          /*! \brief Interrupt service routine for timer 0 overflow\r
105      51           *\r
106      52           * Timer 0 runs at 125 kHz and compare match will occur every millisecond\r
107      53           * (125 / 125 kHz = 1.0 ms), which will result in a call to this function.\r
108      54           * When called, this function will decrement the time left for each timer,\r
109      55           * unless they are already at zero.\r
110      56           */\r
111      57          #pragma vector = TIM0_COMPA_vect\r
112 \r
113    \                                 In  segment CODE, align 2, keep-with-next\r
114      58          __interrupt void TICK_ISR(void)\r
115    \                     TICK_ISR:\r
116      59          {\r
117    \   00000000   93FA               ST      -Y, R31\r
118    \   00000002   93EA               ST      -Y, R30\r
119    \   00000004   920A               ST      -Y, R0\r
120    \   00000006   937A               ST      -Y, R23\r
121    \   00000008   936A               ST      -Y, R22\r
122    \   0000000A   935A               ST      -Y, R21\r
123    \   0000000C   934A               ST      -Y, R20\r
124    \   0000000E   933A               ST      -Y, R19\r
125    \   00000010   932A               ST      -Y, R18\r
126    \   00000012   931A               ST      -Y, R17\r
127    \   00000014   930A               ST      -Y, R16\r
128    \   00000016   B60F               IN      R0, 0x3F\r
129      60                 unsigned char i;\r
130      61          \r
131      62                 // 1 ms has passed, decrement all non-zero timers.\r
132      63                 for (i = 0; i < TIMERS; i++) {\r
133    \   00000018   E000               LDI     R16, 0\r
134    \                     ??TICK_ISR_0:\r
135    \   0000001A   3004               CPI     R16, 4\r
136    \   0000001C   F540               BRCC    ??TICK_ISR_1\r
137      64                         if(timeval[i] > 0) {\r
138    \   0000001E   2F20               MOV     R18, R16\r
139    \   00000020   E030               LDI     R19, 0\r
140    \   00000022   0F22               LSL     R18\r
141    \   00000024   1F33               ROL     R19\r
142    \   00000026   0F22               LSL     R18\r
143    \   00000028   1F33               ROL     R19\r
144    \   0000002A   01F9               MOVW    R31:R30, R19:R18\r
145    \   0000002C   ....               SUBI    R30, LOW((-(timeval) & 0xFFFF))\r
146    \   0000002E   ....               SBCI    R31, (-(timeval) & 0xFFFF) >> 8\r
147    \   00000030   8140               LD      R20, Z\r
148    \   00000032   8151               LDD     R21, Z+1\r
149    \   00000034   8162               LDD     R22, Z+2\r
150    \   00000036   8173               LDD     R23, Z+3\r
151    \   00000038   2B45               OR      R20, R21\r
152    \   0000003A   2B46               OR      R20, R22\r
153    \   0000003C   2B47               OR      R20, R23\r
154    \   0000003E   F0A9               BREQ    ??TICK_ISR_2\r
155      65                                 timeval[i]--;\r
156    \   00000040   2F20               MOV     R18, R16\r
157    \   00000042   E030               LDI     R19, 0\r
158    \   00000044   0F22               LSL     R18\r
159    \   00000046   1F33               ROL     R19\r
160    \   00000048   0F22               LSL     R18\r
161    \   0000004A   1F33               ROL     R19\r
162    \   0000004C   01F9               MOVW    R31:R30, R19:R18\r
163    \   0000004E   ....               SUBI    R30, LOW((-(timeval) & 0xFFFF))\r
164    \   00000050   ....               SBCI    R31, (-(timeval) & 0xFFFF) >> 8\r
165    \   00000052   8140               LD      R20, Z\r
166    \   00000054   8151               LDD     R21, Z+1\r
167    \   00000056   8162               LDD     R22, Z+2\r
168    \   00000058   8173               LDD     R23, Z+3\r
169    \   0000005A   5041               SUBI    R20, 1\r
170    \   0000005C   4050               SBCI    R21, 0\r
171    \   0000005E   4060               SBCI    R22, 0\r
172    \   00000060   4070               SBCI    R23, 0\r
173    \   00000062   8340               ST      Z, R20\r
174    \   00000064   8351               STD     Z+1, R21\r
175    \   00000066   8362               STD     Z+2, R22\r
176    \   00000068   8373               STD     Z+3, R23\r
177      66                         }\r
178      67                 }\r
179    \                     ??TICK_ISR_2:\r
180    \   0000006A   9503               INC     R16\r
181    \   0000006C   CFD6               RJMP    ??TICK_ISR_0\r
182      68          }\r
183    \                     ??TICK_ISR_1:\r
184    \   0000006E   BE0F               OUT     0x3F, R0\r
185    \   00000070   9109               LD      R16, Y+\r
186    \   00000072   9119               LD      R17, Y+\r
187    \   00000074   9129               LD      R18, Y+\r
188    \   00000076   9139               LD      R19, Y+\r
189    \   00000078   9149               LD      R20, Y+\r
190    \   0000007A   9159               LD      R21, Y+\r
191    \   0000007C   9169               LD      R22, Y+\r
192    \   0000007E   9179               LD      R23, Y+\r
193    \   00000080   9009               LD      R0, Y+\r
194    \   00000082   91E9               LD      R30, Y+\r
195    \   00000084   91F9               LD      R31, Y+\r
196    \   00000086   9518               RETI\r
197      69          \r
198      70          \r
199      71          /*! \brief Checks if a specified timer has expired\r
200      72           *\r
201      73           * \param timer Specifies timer\r
202      74           *\r
203      75           * \retval TRUE Timer still going.\r
204      76           * \retval FALSE Timer has expired.\r
205      77           */ \r
206 \r
207    \                                 In  segment CODE, align 2, keep-with-next\r
208      78          unsigned char Time_Left(unsigned char timer)\r
209    \                     Time_Left:\r
210      79          {\r
211    \   00000000   2F20               MOV     R18, R16\r
212      80                 if(timeval[timer] > 0) {\r
213    \   00000002   2F02               MOV     R16, R18\r
214    \   00000004   E010               LDI     R17, 0\r
215    \   00000006   0F00               LSL     R16\r
216    \   00000008   1F11               ROL     R17\r
217    \   0000000A   0F00               LSL     R16\r
218    \   0000000C   1F11               ROL     R17\r
219    \   0000000E   01F8               MOVW    R31:R30, R17:R16\r
220    \   00000010   ....               SUBI    R30, LOW((-(timeval) & 0xFFFF))\r
221    \   00000012   ....               SBCI    R31, (-(timeval) & 0xFFFF) >> 8\r
222    \   00000014   8140               LD      R20, Z\r
223    \   00000016   8151               LDD     R21, Z+1\r
224    \   00000018   8162               LDD     R22, Z+2\r
225    \   0000001A   8173               LDD     R23, Z+3\r
226    \   0000001C   2B45               OR      R20, R21\r
227    \   0000001E   2B46               OR      R20, R22\r
228    \   00000020   2B47               OR      R20, R23\r
229    \   00000022   F011               BREQ    ??Time_Left_0\r
230      81                         return(TRUE);\r
231    \   00000024   E001               LDI     R16, 1\r
232    \   00000026   9508               RET\r
233      82                 } else {\r
234      83                         return(FALSE);\r
235    \                     ??Time_Left_0:\r
236    \   00000028   E000               LDI     R16, 0\r
237    \   0000002A   9508               RET\r
238      84                 }\r
239      85          }\r
240      86          \r
241      87          \r
242      88          /*! \brief Sets the specified timer\r
243      89           *\r
244      90           * \param timer Specifies timer\r
245      91           * \param min Minutes for timer to count down\r
246      92           * \param sec Seconds for timer to count down\r
247      93           * \param ms Milliseconds for timer to count down\r
248      94           */\r
249 \r
250    \                                 In  segment CODE, align 2, keep-with-next\r
251      95          void Time_Set(unsigned char timer, unsigned int min, unsigned char sec,\r
252    \                     Time_Set:\r
253      96                                           unsigned char ms)\r
254      97          {\r
255    \   00000000   ....               RCALL   ?PROLOGUE7_L09\r
256    \   00000002                      REQUIRE ?Register_R4_is_cg_reg\r
257    \   00000002                      REQUIRE ?Register_R5_is_cg_reg\r
258    \   00000002                      REQUIRE ?Register_R6_is_cg_reg\r
259    \   00000002   2FA0               MOV     R26, R16\r
260    \   00000004   01C9               MOVW    R25:R24, R19:R18\r
261    \   00000006   2E61               MOV     R6, R17\r
262    \   00000008   2E44               MOV     R4, R20\r
263      98          //     timeval[i] = 4 * (1000*(sec + 60*min) + ms);   // about 4000 ticks per second\r
264      99          //     timeval[i] = 240000 * (unsigned long)min;\r
265     100          //     timeval[i] += 4000 * (unsigned long)sec;\r
266     101          //     timeval[i] += 4 * (unsigned long)ms;\r
267     102          \r
268     103                 timeval[timer] = 60000 * (unsigned long)min;\r
269    \   0000000A   01AC               MOVW    R21:R20, R25:R24\r
270    \   0000000C   E060               LDI     R22, 0\r
271    \   0000000E   E070               LDI     R23, 0\r
272    \   00000010   E600               LDI     R16, 96\r
273    \   00000012   EE1A               LDI     R17, 234\r
274    \   00000014   E020               LDI     R18, 0\r
275    \   00000016   E030               LDI     R19, 0\r
276    \   00000018   ....               RCALL   ?L_MUL_L03\r
277    \   0000001A   2F4A               MOV     R20, R26\r
278    \   0000001C   E050               LDI     R21, 0\r
279    \   0000001E   0F44               LSL     R20\r
280    \   00000020   1F55               ROL     R21\r
281    \   00000022   0F44               LSL     R20\r
282    \   00000024   1F55               ROL     R21\r
283    \   00000026   01FA               MOVW    R31:R30, R21:R20\r
284    \   00000028   ....               SUBI    R30, LOW((-(timeval) & 0xFFFF))\r
285    \   0000002A   ....               SBCI    R31, (-(timeval) & 0xFFFF) >> 8\r
286    \   0000002C   8300               ST      Z, R16\r
287    \   0000002E   8311               STD     Z+1, R17\r
288    \   00000030   8322               STD     Z+2, R18\r
289    \   00000032   8333               STD     Z+3, R19\r
290     104                 timeval[timer] += 1000 * (unsigned long)sec;\r
291    \   00000034   2D46               MOV     R20, R6\r
292    \   00000036   E050               LDI     R21, 0\r
293    \   00000038   E060               LDI     R22, 0\r
294    \   0000003A   E070               LDI     R23, 0\r
295    \   0000003C   EE08               LDI     R16, 232\r
296    \   0000003E   E013               LDI     R17, 3\r
297    \   00000040   E020               LDI     R18, 0\r
298    \   00000042   E030               LDI     R19, 0\r
299    \   00000044   ....               RCALL   ?L_MUL_L03\r
300    \   00000046   2F4A               MOV     R20, R26\r
301    \   00000048   E050               LDI     R21, 0\r
302    \   0000004A   0F44               LSL     R20\r
303    \   0000004C   1F55               ROL     R21\r
304    \   0000004E   0F44               LSL     R20\r
305    \   00000050   1F55               ROL     R21\r
306    \   00000052   01FA               MOVW    R31:R30, R21:R20\r
307    \   00000054   ....               SUBI    R30, LOW((-(timeval) & 0xFFFF))\r
308    \   00000056   ....               SBCI    R31, (-(timeval) & 0xFFFF) >> 8\r
309    \   00000058   8140               LD      R20, Z\r
310    \   0000005A   8151               LDD     R21, Z+1\r
311    \   0000005C   8162               LDD     R22, Z+2\r
312    \   0000005E   8173               LDD     R23, Z+3\r
313    \   00000060   0F40               ADD     R20, R16\r
314    \   00000062   1F51               ADC     R21, R17\r
315    \   00000064   1F62               ADC     R22, R18\r
316    \   00000066   1F73               ADC     R23, R19\r
317    \   00000068   8340               ST      Z, R20\r
318    \   0000006A   8351               STD     Z+1, R21\r
319    \   0000006C   8362               STD     Z+2, R22\r
320    \   0000006E   8373               STD     Z+3, R23\r
321     105                 timeval[timer] += 1 * (unsigned long)ms;\r
322    \   00000070   2455               CLR     R5\r
323    \   00000072   0182               MOVW    R17:R16, R5:R4\r
324    \   00000074   E020               LDI     R18, 0\r
325    \   00000076   E030               LDI     R19, 0\r
326    \   00000078   2F4A               MOV     R20, R26\r
327    \   0000007A   E050               LDI     R21, 0\r
328    \   0000007C   0F44               LSL     R20\r
329    \   0000007E   1F55               ROL     R21\r
330    \   00000080   0F44               LSL     R20\r
331    \   00000082   1F55               ROL     R21\r
332    \   00000084   01FA               MOVW    R31:R30, R21:R20\r
333    \   00000086   ....               SUBI    R30, LOW((-(timeval) & 0xFFFF))\r
334    \   00000088   ....               SBCI    R31, (-(timeval) & 0xFFFF) >> 8\r
335    \   0000008A   8140               LD      R20, Z\r
336    \   0000008C   8151               LDD     R21, Z+1\r
337    \   0000008E   8162               LDD     R22, Z+2\r
338    \   00000090   8173               LDD     R23, Z+3\r
339    \   00000092   0F40               ADD     R20, R16\r
340    \   00000094   1F51               ADC     R21, R17\r
341    \   00000096   1F62               ADC     R22, R18\r
342    \   00000098   1F73               ADC     R23, R19\r
343    \   0000009A   8340               ST      Z, R20\r
344    \   0000009C   8351               STD     Z+1, R21\r
345    \   0000009E   8362               STD     Z+2, R22\r
346    \   000000A0   8373               STD     Z+3, R23\r
347     106          }\r
348    \   000000A2   E0E7               LDI     R30, 7\r
349    \   000000A4   ....               RJMP    ?EPILOGUE_B7_L09\r
350     107          \r
351     108          \r
352     109          /*! \brief Stops timers\r
353     110           *\r
354     111           * Sets timer0's clock source to none.\r
355     112           */\r
356 \r
357    \                                 In  segment CODE, align 2, keep-with-next\r
358     113          void Time_Stop(void)\r
359    \                     Time_Stop:\r
360     114          {\r
361     115                 TCCR0B = 0;\r
362    \   00000000   E000               LDI     R16, 0\r
363    \   00000002   BF03               OUT     0x33, R16\r
364     116          }\r
365    \   00000004   9508               RET\r
366    \   00000006                      REQUIRE _A_TCCR0B\r
367     117          \r
368     118          \r
369     119          /*! \brief Starts timers\r
370     120           *\r
371     121           * Sets timer0's clock source to system clock divided by 64.\r
372     122           */\r
373 \r
374    \                                 In  segment CODE, align 2, keep-with-next\r
375     123          void Time_Start(void)\r
376    \                     Time_Start:\r
377     124          {\r
378     125                 TCCR0B = (0<<CS02)|(1<<CS01)|(1<<CS00);         // CLKT0 = CLK/64 = 125 kHz.\r
379    \   00000000   E003               LDI     R16, 3\r
380    \   00000002   BF03               OUT     0x33, R16\r
381     126          }\r
382    \   00000004   9508               RET\r
383    \   00000006                      REQUIRE _A_TCCR0B\r
384     127          \r
385     128          \r
386     129          /*! \brief Initializes timers\r
387     130           *\r
388     131           * Resets all the timer values to 0, then sets up timer 0 for a compare match\r
389     132           * every millisecond.\r
390     133           */\r
391 \r
392    \                                 In  segment CODE, align 2, keep-with-next\r
393     134          void Time_Init(void)\r
394    \                     Time_Init:\r
395     135          {\r
396     136                 unsigned char i;\r
397     137                 \r
398     138                 for (i = 0; i<<TIMERS; i++)     {\r
399    \   00000000   E040               LDI     R20, 0\r
400    \                     ??Time_Init_0:\r
401    \   00000002   2344               TST     R20\r
402    \   00000004   F099               BREQ    ??Time_Init_1\r
403     139                         timeval[i] = 0;\r
404    \   00000006   E000               LDI     R16, 0\r
405    \   00000008   E010               LDI     R17, 0\r
406    \   0000000A   E020               LDI     R18, 0\r
407    \   0000000C   E030               LDI     R19, 0\r
408    \   0000000E   2F64               MOV     R22, R20\r
409    \   00000010   E070               LDI     R23, 0\r
410    \   00000012   0F66               LSL     R22\r
411    \   00000014   1F77               ROL     R23\r
412    \   00000016   0F66               LSL     R22\r
413    \   00000018   1F77               ROL     R23\r
414    \   0000001A   01FB               MOVW    R31:R30, R23:R22\r
415    \   0000001C   ....               SUBI    R30, LOW((-(timeval) & 0xFFFF))\r
416    \   0000001E   ....               SBCI    R31, (-(timeval) & 0xFFFF) >> 8\r
417    \   00000020   8300               ST      Z, R16\r
418    \   00000022   8311               STD     Z+1, R17\r
419    \   00000024   8322               STD     Z+2, R18\r
420    \   00000026   8333               STD     Z+3, R19\r
421     140                 }\r
422    \   00000028   9543               INC     R20\r
423    \   0000002A   CFEB               RJMP    ??Time_Init_0\r
424     141          \r
425     142                 //    OCR0A = 0;  // Doesn't matter, will run in normal mode.\r
426     143                 \r
427     144                 OCR0A = 125;  // Will give a compare match every ms.\r
428    \                     ??Time_Init_1:\r
429    \   0000002C   E70D               LDI     R16, 125\r
430    \   0000002E   BB03               OUT     0x13, R16\r
431     145                 \r
432     146                 OCR0B = 0;  // Doesn't matter, will run in normal mode.\r
433    \   00000030   E000               LDI     R16, 0\r
434    \   00000032   BB02               OUT     0x12, R16\r
435     147          \r
436     148                         //    TCCR0A = 0;  // Normal 8-bit mode, no input capture.\r
437     149          \r
438     150                 TCCR0A = (1<<WGM00);  // 8-bit CTC mode.\r
439    \   00000034   E001               LDI     R16, 1\r
440    \   00000036   BB05               OUT     0x15, R16\r
441     151                 \r
442     152                 //    TCCR0B = (0<<CS02)|(1<<CS01)|(0<<CS00);  // CLKT0 = CLK/8 = 1 MHz.\r
443     153                 \r
444     154                 TCCR0B = (0<<CS02)|(1<<CS01)|(1<<CS00);         // CLKT0 = CLK/64 = 125 kHz.\r
445    \   00000038   E003               LDI     R16, 3\r
446    \   0000003A   BF03               OUT     0x33, R16\r
447     155          \r
448     156                 //    TIMSK |= (1<<TOIE0);      // Overflow interrupt enabled.\r
449     157          \r
450     158                 TIMSK |= (1<<OCIE0A);  // Timer 0, Compare match A interrupt enabled.\r
451    \   0000003C   B709               IN      R16, 0x39\r
452    \   0000003E   6100               ORI     R16, 0x10\r
453    \   00000040   BF09               OUT     0x39, R16\r
454     159          \r
455     160                 // Enable interrupts, just in case they weren't already.\r
456     161                 __enable_interrupt();       \r
457    \   00000042   9478               SEI\r
458     162          }\r
459    \   00000044   9508               RET\r
460    \   00000046                      REQUIRE _A_TIMSK\r
461    \   00000046                      REQUIRE _A_TCCR0B\r
462    \   00000046                      REQUIRE _A_TCCR0A\r
463    \   00000046                      REQUIRE _A_OCR0A\r
464    \   00000046                      REQUIRE _A_OCR0B\r
465 \r
466    \                                 In  segment INTVEC, offset 0x1c, root\r
467    \                     `??TICK_ISR??INTVEC 28`:\r
468    \   0000001C   ....               RJMP    TICK_ISR\r
469 \r
470    Maximum stack usage in bytes:\r
471 \r
472      Function   CSTACK RSTACK\r
473      --------   ------ ------\r
474      TICK_ISR      11      2\r
475      Time_Init      0      2\r
476      Time_Left      0      2\r
477      Time_Set       7      4\r
478      Time_Start     0      2\r
479      Time_Stop      0      2\r
480 \r
481 \r
482    Segment part sizes:\r
483 \r
484      Function/Label        Bytes\r
485      --------------        -----\r
486      _A_TIMSK                 1\r
487      _A_TCCR0B                1\r
488      _A_TCCR0A                1\r
489      _A_OCR0A                 1\r
490      _A_OCR0B                 1\r
491      timeval                 16\r
492      TICK_ISR               136\r
493      Time_Left               44\r
494      Time_Set               166\r
495      Time_Stop                6\r
496      Time_Start               6\r
497      Time_Init               70\r
498      ??TICK_ISR??INTVEC 28    2\r
499       Others                  6\r
500 \r
501  \r
502    5 bytes in segment ABSOLUTE\r
503  428 bytes in segment CODE\r
504    6 bytes in segment INITTAB\r
505    2 bytes in segment INTVEC\r
506   16 bytes in segment NEAR_Z\r
507  \r
508  428 bytes of CODE memory (+ 8 bytes shared)\r
509   16 bytes of DATA memory (+ 5 bytes shared)\r
510 \r
511 Errors: none\r
512 Warnings: none\r