summaryrefslogtreecommitdiffstats
path: root/c
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2011-03-04 14:06:50 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2011-03-04 14:06:50 +0000
commitd3210d0a11dbebd032b42a4bac3031143d591b5e (patch)
tree3a18602780f958943f8a2d5b09a63772a4df6232 /c
parentFix the date. (diff)
downloadrtems-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/ChangeLog7
-rw-r--r--c/src/lib/libbsp/sparc/erc32/clock/ckinit.c10
-rw-r--r--c/src/lib/libbsp/sparc/leon2/ChangeLog7
-rw-r--r--c/src/lib/libbsp/sparc/leon2/clock/ckinit.c13
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