Subversion Repositories HelenOS-historic

Rev

Rev 664 | Rev 958 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 664 Rev 665
Line 29... Line 29...
29
#include <arch/drivers/tick.h>
29
#include <arch/drivers/tick.h>
30
#include <arch/interrupt.h>
30
#include <arch/interrupt.h>
31
#include <arch/asm.h>
31
#include <arch/asm.h>
32
#include <arch/register.h>
32
#include <arch/register.h>
33
#include <debug.h>
33
#include <debug.h>
34
#include <print.h>
34
#include <time/clock.h>
35
 
35
 
-
 
36
/** Initialize tick interrupt. */
36
void tick_init(void)
37
void tick_init(void)
37
{
38
{
38
    tick_compare_reg_t compare;
39
    tick_compare_reg_t compare;
39
   
40
   
40
    interrupt_register(14, "tick_int", tick_interrupt);
41
    interrupt_register(14, "tick_int", tick_interrupt);
Line 42... Line 43...
42
    compare.tick_cmpr = TICK_DELTA;
43
    compare.tick_cmpr = TICK_DELTA;
43
    tick_compare_write(compare.value);
44
    tick_compare_write(compare.value);
44
    tick_write(0);
45
    tick_write(0);
45
}
46
}
46
 
47
 
-
 
48
/** Process tick interrupt.
-
 
49
 *
-
 
50
 * @param n Interrupt Level, 14,  (can be ignored)
-
 
51
 * @param stack Stack pointer of the interrupted context.
-
 
52
 */
47
void tick_interrupt(int n, void *stack)
53
void tick_interrupt(int n, void *stack)
48
{
54
{
-
 
55
    softint_reg_t softint, clear;
-
 
56
   
-
 
57
    softint.value = softint_read();
-
 
58
   
-
 
59
    /*
-
 
60
     * Make sure we are servicing interrupt_level_14
-
 
61
     */
-
 
62
    ASSERT(n == 14);
-
 
63
   
-
 
64
    /*
49
    panic("Unserviced %s.\n", __FUNCTION__);
65
     * Make sure we are servicing TICK_INT.
-
 
66
     */
-
 
67
    ASSERT(softint.tick_int);
-
 
68
 
-
 
69
    /*
-
 
70
     * Clear tick interrupt.
-
 
71
     */
-
 
72
    clear.value = 0;
-
 
73
    clear.tick_int = 1;
-
 
74
    clear_softint_write(clear.value);
-
 
75
   
-
 
76
    /*
-
 
77
     * Restart counter.
-
 
78
     */
-
 
79
    tick_write(0);
-
 
80
   
-
 
81
    clock();
50
}
82
}