summaryrefslogtreecommitdiffstats
path: root/c
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2009-05-27 14:34:24 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2009-05-27 14:34:24 +0000
commit8d64f08eb8f687edcca0c926b09103db5f3f88f7 (patch)
tree6038fb84f3b7d1eea3567720a1915f66564917db /c
parent2009-05-27 Sebastian Huber <sebastian.huber@embedded-brains.de> (diff)
downloadrtems-8d64f08eb8f687edcca0c926b09103db5f3f88f7.tar.bz2
2009-05-27 Fernando Nicodemos <fgnicodemos@terra.com.br>
* at91rm9200/clock/clock.c: Add support for nanoseconds since last tick. The resolution is not that high but better than nothing.
Diffstat (limited to 'c')
-rw-r--r--c/src/lib/libcpu/arm/ChangeLog5
-rw-r--r--c/src/lib/libcpu/arm/at91rm9200/clock/clock.c15
2 files changed, 19 insertions, 1 deletions
diff --git a/c/src/lib/libcpu/arm/ChangeLog b/c/src/lib/libcpu/arm/ChangeLog
index 8e446c1ec7..4ba065b15c 100644
--- a/c/src/lib/libcpu/arm/ChangeLog
+++ b/c/src/lib/libcpu/arm/ChangeLog
@@ -1,3 +1,8 @@
+2009-05-27 Fernando Nicodemos <fgnicodemos@terra.com.br>
+
+ * at91rm9200/clock/clock.c: Add support for nanoseconds since last
+ tick. The resolution is not that high but better than nothing.
+
2008-12-11 Ralf Corsepius <ralf.corsepius@rtems.org>
* at91rm9200/clock/clock.c, lpc22xx/clock/clockdrv.c,
diff --git a/c/src/lib/libcpu/arm/at91rm9200/clock/clock.c b/c/src/lib/libcpu/arm/at91rm9200/clock/clock.c
index cc06c4a794..04b3f4f96f 100644
--- a/c/src/lib/libcpu/arm/at91rm9200/clock/clock.c
+++ b/c/src/lib/libcpu/arm/at91rm9200/clock/clock.c
@@ -76,6 +76,7 @@ rtems_irq_connect_data clock_isr_data = {AT91RM9200_INT_SYSIRQ,
#define Clock_driver_support_install_isr( _new, _old ) \
BSP_install_rtems_irq_handler(&clock_isr_data)
+uint16_t st_pimr_value;
void Clock_driver_support_initialize_hardware(void)
{
uint32_t st_str;
@@ -83,8 +84,9 @@ void Clock_driver_support_initialize_hardware(void)
/* the system timer is driven from SLCK */
slck = at91rm9200_get_slck();
- st_pimr_reload =
+ st_pimr_value =
(((rtems_configuration_get_microseconds_per_tick() * slck) + (1000000/2))/ 1000000);
+ st_pimr_reload = st_pimr_value;
/* read the status to clear the int */
st_str = ST_REG(ST_SR);
@@ -96,6 +98,17 @@ void Clock_driver_support_initialize_hardware(void)
ST_REG(ST_PIMR) = st_pimr_reload;
}
+uint32_t bsp_clock_nanoseconds_since_last_tick(void)
+{
+ uint16_t slck_counts;
+
+ slck_counts = st_pimr_value - st_pimr_reload;
+ return (rtems_configuration_get_microseconds_per_tick() * slck_counts * 1000)
+ / st_pimr_value;
+}
+
+#define Clock_driver_nanoseconds_since_last_tick \
+ bsp_clock_nanoseconds_since_last_tick
#define CLOCK_VECTOR 0