summaryrefslogtreecommitdiffstats
path: root/bsp-howto/clock.rst
diff options
context:
space:
mode:
Diffstat (limited to 'bsp-howto/clock.rst')
-rw-r--r--bsp-howto/clock.rst38
1 files changed, 24 insertions, 14 deletions
diff --git a/bsp-howto/clock.rst b/bsp-howto/clock.rst
index f3d30ce..ed83472 100644
--- a/bsp-howto/clock.rst
+++ b/bsp-howto/clock.rst
@@ -65,8 +65,8 @@ Clock Tick Only
Initialization
==============
-The clock driver is initialized by a dedicated system initialization handler if
-requested by the application configuration option
+The clock driver is initialized by the ``_Clock_Initialize()`` system
+initialization handler if requested by the application configuration option
``CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER``. The clock driver does not use the
legacy IO driver framework.
@@ -139,6 +139,9 @@ Simple Timecounter Variant
For an example see the `ERC32 clock driver
<https://git.rtems.org/rtems/tree/bsps/sparc/erc32/clock/ckinit.c>`_.
+The argument parameter of ``Clock_driver_timecounter_tick( arg )`` is the
+argument used to install the clock interrupt handler. Device drivers may use
+this argument to access their control state.
.. code-block:: c
@@ -165,9 +168,9 @@ For an example see the `ERC32 clock driver
);
}
- static void some_tc_tick( void )
+ static void some_tc_tick( rtems_timecounter_simple *tc )
{
- rtems_timecounter_simple_downcounter_tick( &some_tc, some_tc_get );
+ rtems_timecounter_simple_downcounter_tick( tc, some_tc_get );
}
static void some_support_initialize_hardware( void )
@@ -193,8 +196,8 @@ For an example see the `ERC32 clock driver
#define Clock_driver_support_initialize_hardware() \
some_support_initialize_hardware()
- #define Clock_driver_timecounter_tick() \
- some_tc_tick()
+ #define Clock_driver_timecounter_tick( arg ) \
+ some_tc_tick( arg )
#include "../../../shared/dev/clock/clockimpl.h"
@@ -224,15 +227,20 @@ Install Clock Tick Interrupt Service Routine
============================================
The clock driver may provide a function to install the clock tick interrupt
-service routine via ``Clock_driver_support_install_isr()``. The clock tick
-interrupt service routine is passed as the one and only parameter to this
-macro. The default implementation will do nothing.
+service routine via ``Clock_driver_support_install_isr( isr )``. The clock
+tick interrupt service routine is passed as the one and only parameter to this
+macro. The default implementation will do nothing. The argument parameter (in
+the code below ``&some_instance``) for the installed interrupt handler is
+available in the ``Clock_driver_support_at_tick( arg )`` and
+``Clock_driver_support_initialize_hardware( arg )`` customization macros.
.. code-block:: c
#include <bsp/irq.h>
#include <bsp/fatal.h>
+ static some_control some_instance;
+
static void some_support_install_isr( rtems_interrupt_handler isr )
{
rtems_status_code sc;
@@ -241,7 +249,7 @@ macro. The default implementation will do nothing.
"Clock",
RTEMS_INTERRUPT_UNIQUE,
isr,
- NULL
+ &some_instance
);
if ( sc != RTEMS_SUCCESSFUL ) {
bsp_fatal( SOME_FATAL_IRQ_INSTALL );
@@ -257,17 +265,19 @@ Support At Tick
===============
The hardware-specific support at tick is specified by
-``Clock_driver_support_at_tick()``.
+``Clock_driver_support_at_tick( arg )``. The ``arg`` is the argument used to
+install the clock interrupt handler. Device drivers may use this argument to
+access their control state.
.. code-block:: c
- static void some_support_at_tick( void )
+ static void some_support_at_tick( some_control *arg )
{
/* Clear interrupt */
}
- #define Clock_driver_support_at_tick() \
- some_support_at_tick()
+ #define Clock_driver_support_at_tick( arg ) \
+ some_support_at_tick( arg )
#include "../../../shared/dev/clock/clockimpl.h"