diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2011-03-04 14:06:50 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2011-03-04 14:06:50 +0000 |
commit | d3210d0a11dbebd032b42a4bac3031143d591b5e (patch) | |
tree | 3a18602780f958943f8a2d5b09a63772a4df6232 /c | |
parent | Fix the date. (diff) | |
download | rtems-d3210d0a11dbebd032b42a4bac3031143d591b5e.tar.bz2 |
2011-03-04 Joel Sherrill <joel.sherrilL@OARcorp.com>
PR 1748/bsps
* clock/ckinit.c: When the clock tick generates an interrupt WHILE we
have interrupts disabled doing a get TOD or uptime, the get
nanoseconds handler was returning a bogusly large number.
Diffstat (limited to 'c')
-rw-r--r-- | c/src/lib/libbsp/sparc/erc32/ChangeLog | 7 | ||||
-rw-r--r-- | c/src/lib/libbsp/sparc/erc32/clock/ckinit.c | 10 | ||||
-rw-r--r-- | c/src/lib/libbsp/sparc/leon2/ChangeLog | 7 | ||||
-rw-r--r-- | c/src/lib/libbsp/sparc/leon2/clock/ckinit.c | 13 |
4 files changed, 30 insertions, 7 deletions
diff --git a/c/src/lib/libbsp/sparc/erc32/ChangeLog b/c/src/lib/libbsp/sparc/erc32/ChangeLog index bead231808..d6b52b1c67 100644 --- a/c/src/lib/libbsp/sparc/erc32/ChangeLog +++ b/c/src/lib/libbsp/sparc/erc32/ChangeLog @@ -1,3 +1,10 @@ +2011-03-04 Joel Sherrill <joel.sherrilL@OARcorp.com> + + PR 1748/bsps + * clock/ckinit.c: When the clock tick generates an interrupt WHILE we + have interrupts disabled doing a get TOD or uptime, the get + nanoseconds handler was returning a bogusly large number. + 2011-03-03 Joel Sherrill <joel.sherrilL@OARcorp.com> PR 1750/bsps diff --git a/c/src/lib/libbsp/sparc/erc32/clock/ckinit.c b/c/src/lib/libbsp/sparc/erc32/clock/ckinit.c index e1175909f8..9987de285b 100644 --- a/c/src/lib/libbsp/sparc/erc32/clock/ckinit.c +++ b/c/src/lib/libbsp/sparc/erc32/clock/ckinit.c @@ -49,11 +49,17 @@ extern int CLOCK_SPEED; uint32_t bsp_clock_nanoseconds_since_last_tick(void) { uint32_t clicks; + uint32_t usecs; clicks = ERC32_MEC.Real_Time_Clock_Counter; - return (uint32_t) - (rtems_configuration_get_microseconds_per_tick() - clicks) * 1000; + if ( ERC32_Is_interrupt_pending( ERC32_INTERRUPT_REAL_TIME_CLOCK ) ) { + clicks = ERC32_MEC.Real_Time_Clock_Counter; + usecs = (2*rtems_configuration_get_microseconds_per_tick() - clicks); + } else { + usecs = (rtems_configuration_get_microseconds_per_tick() - clicks); + } + return usecs * 1000; } #define Clock_driver_nanoseconds_since_last_tick \ diff --git a/c/src/lib/libbsp/sparc/leon2/ChangeLog b/c/src/lib/libbsp/sparc/leon2/ChangeLog index cc51826fec..c183558b9e 100644 --- a/c/src/lib/libbsp/sparc/leon2/ChangeLog +++ b/c/src/lib/libbsp/sparc/leon2/ChangeLog @@ -1,3 +1,10 @@ +2011-03-04 Joel Sherrill <joel.sherrilL@OARcorp.com> + + PR 1748/bsps + * clock/ckinit.c: When the clock tick generates an interrupt WHILE we + have interrupts disabled doing a get TOD or uptime, the get + nanoseconds handler was returning a bogusly large number. + 2011-02-11 Ralf Corsépius <ralf.corsepius@rtems.org> * cchip/cchip.c, include/tm27.h, startup/spurious.c: diff --git a/c/src/lib/libbsp/sparc/leon2/clock/ckinit.c b/c/src/lib/libbsp/sparc/leon2/clock/ckinit.c index 90a17cbb92..0648b89d62 100644 --- a/c/src/lib/libbsp/sparc/leon2/clock/ckinit.c +++ b/c/src/lib/libbsp/sparc/leon2/clock/ckinit.c @@ -62,12 +62,15 @@ extern int CLOCK_SPEED; uint32_t bsp_clock_nanoseconds_since_last_tick(void) { uint32_t clicks; + uint32_t usecs; - clicks = LEON_REG.Timer_Counter_1; - - /* Down counter */ - return (uint32_t) - (rtems_configuration_get_microseconds_per_tick() - clicks) * 1000; + if ( LEON_Is_interrupt_pending( LEON_INTERRUPT_TIMER1 ) ) { + clicks = LEON_REG.Timer_Counter_1; + usecs = (2*rtems_configuration_get_microseconds_per_tick() - clicks); + } else { + usecs = (rtems_configuration_get_microseconds_per_tick() - clicks); + } + return usecs * 1000; } #define Clock_driver_nanoseconds_since_last_tick bsp_clock_nanoseconds_since_last_tick |