diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2009-05-27 14:34:24 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2009-05-27 14:34:24 +0000 |
commit | 8d64f08eb8f687edcca0c926b09103db5f3f88f7 (patch) | |
tree | 6038fb84f3b7d1eea3567720a1915f66564917db /c/src/lib/libcpu/arm | |
parent | 2009-05-27 Sebastian Huber <sebastian.huber@embedded-brains.de> (diff) | |
download | rtems-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/src/lib/libcpu/arm')
-rw-r--r-- | c/src/lib/libcpu/arm/ChangeLog | 5 | ||||
-rw-r--r-- | c/src/lib/libcpu/arm/at91rm9200/clock/clock.c | 15 |
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 |