/* * This file provides a template for the clock device driver initialization. * * If possible, please use the dev/clock/clockimpl.h method for instantiating * a clock driver. */ /* * COPYRIGHT (c) 1989-2014. * On-Line Applications Research Corporation (OAR). * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at * http://www.rtems.org/license/LICENSE. */ #include #include #include void Clock_exit( void ); rtems_isr Clock_isr( rtems_vector_number vector ); /* * The interrupt vector number associated with the clock tick device * driver. */ #define CLOCK_VECTOR 4 /* * Clock_driver_ticks is a monotonically increasing counter of the * number of clock ticks since the driver was initialized. */ volatile uint32_t Clock_driver_ticks; /* * Clock_isrs is the number of clock ISRs until the next invocation of * the RTEMS clock tick routine. The clock tick device driver * gets an interrupt once a millisecond and counts down until the * length of time between the user configured microseconds per tick * has passed. */ uint32_t Clock_isrs; /* ISRs until next tick */ /* * The previous ISR on this clock tick interrupt vector. */ rtems_isr_entry Old_ticker; static void Clock_exit( void ); /* * Isr Handler */ static rtems_isr Clock_isr( rtems_vector_number vector ) { /* * bump the number of clock driver ticks since initialization * * determine if it is time to announce the passing of tick as configured * to RTEMS through the rtems_clock_tick directive * * perform any timer dependent tasks */ } /* * Install_clock * * Install a clock tick handler and reprograms the chip. This * is used to initially establish the clock tick. */ void Install_clock( rtems_isr_entry clock_isr ) { /* * Initialize the clock tick device driver variables */ Clock_driver_ticks = 0; Clock_isrs = rtems_configuration_get_microseconds_per_tick() / 1000; Old_ticker = (rtems_isr_entry) set_vector( clock_isr, CLOCK_VECTOR, 1 ); /* * Hardware specific initialize goes here */ /* XXX */ /* * Schedule the clock cleanup routine to execute if the application exits. */ atexit( Clock_exit ); } /* * Clean up before the application exits */ void Clock_exit( void ) { /* XXX: turn off the timer interrupts */ /* XXX: If necessary, restore the old vector */ } void _Clock_Initialize( void ) { Install_clock( Clock_isr ); }