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