diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2000-11-27 17:52:48 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2000-11-27 17:52:48 +0000 |
commit | 11edb53f852eb9ff2c8c6c7f69445ba15e67824d (patch) | |
tree | 26a0771e4a042e7ca6ec1dc0db96759114718a18 /c/src/lib/libbsp/m68k/sim68000/clock | |
parent | 2000-11-27 Joel Sherrill <joel@OARcorp.com> (diff) | |
download | rtems-11edb53f852eb9ff2c8c6c7f69445ba15e67824d.tar.bz2 |
2000-11-27 Joel Sherrill <joel@OARcorp.com>
* README, sim68000.setup, clock/clockdrv.c: Modified to add
support for timer as clock tick source. Compiles but untested.
Diffstat (limited to 'c/src/lib/libbsp/m68k/sim68000/clock')
-rw-r--r-- | c/src/lib/libbsp/m68k/sim68000/clock/clockdrv.c | 47 |
1 files changed, 40 insertions, 7 deletions
diff --git a/c/src/lib/libbsp/m68k/sim68000/clock/clockdrv.c b/c/src/lib/libbsp/m68k/sim68000/clock/clockdrv.c index a2f865f5eb..86e9734960 100644 --- a/c/src/lib/libbsp/m68k/sim68000/clock/clockdrv.c +++ b/c/src/lib/libbsp/m68k/sim68000/clock/clockdrv.c @@ -6,17 +6,50 @@ #include <bsp.h> -#define CLOCK_VECTOR 0 +#define CLOCK_VECTOR 84 #define Clock_driver_support_install_isr( _new, _old ) \ do { _old = (rtems_isr_entry) set_vector( _new, CLOCK_VECTOR, 1 ); } while(0) -#define Clock_driver_support_initialize_hardware() - -#define Clock_driver_support_at_tick() \ - Clock_driver_support_initialize_hardware() - -#define Clock_driver_support_shutdown_hardware() +typedef struct { + volatile unsigned8 cr; /* 0 - 0 : Timer Control Register */ + volatile unsigned8 pad0; /* 1 - 1 : pad */ + volatile unsigned8 ivr; /* 2 - 2 : Timer Interrupt Vector Register */ + volatile unsigned8 pad1; /* 3 - 3 : pad */ + volatile unsigned32 cpr; /* 4 - 7 : Timer Counter Preload Register */ + volatile unsigned8 pad2[12]; /* 8 - 19 : pad */ + volatile unsigned32 sr; /* 20 - 23 : Timer Status Register */ +} timer_hw_t; + +#define TIMER_BASE (timer_hw_t *)0x72001 + +/* 8 microseconds per click, 125,000 per second */ + +/* XXX should check that microseconds_per_tick is >= 8 */ +void Clock_driver_support_initialize_hardware() +{ + timer_hw_t *t = TIMER_BASE; + + t->ivr = CLOCK_VECTOR; + t->cpr = rtems_configuration_get_microseconds_per_tick() / 8; + t->cr = 0xA0; /* initialize with timer disabled */ + t->cr = 0xA1; /* enable timer */ +} + +void Clock_driver_support_at_tick() +{ + timer_hw_t *t = TIMER_BASE; + + t->sr = 0xA0; /* Negate timer interrupt request */ +} + + +void Clock_driver_support_shutdown_hardware() +{ + timer_hw_t *t = TIMER_BASE; + + t->cr = 0xA0; /* initialize with timer disabled */ +} #include "../../../shared/clockdrv_shell.c" |