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 | } |