On Mon, Aug 21, 2017 at 12:25 PM, Denis Obrezkov <denisobrez...@gmail.com> wrote: > 2017-08-17 17:13 GMT+02:00 Gedare Bloom <ged...@rtems.org>: >> >> On Wed, Aug 16, 2017 at 11:13 AM, Denis Obrezkov >> <denisobrez...@gmail.com> wrote: >> > --- >> > c/src/lib/libbsp/riscv32/hifive1/clock/clock.c | 67 >> > ++++++++++++++++++++++++++ >> > 1 file changed, 67 insertions(+) >> > create mode 100644 c/src/lib/libbsp/riscv32/hifive1/clock/clock.c >> > >> > diff --git a/c/src/lib/libbsp/riscv32/hifive1/clock/clock.c >> > b/c/src/lib/libbsp/riscv32/hifive1/clock/clock.c >> > new file mode 100644 >> > index 0000000..74132ed >> > --- /dev/null >> > +++ b/c/src/lib/libbsp/riscv32/hifive1/clock/clock.c >> > @@ -0,0 +1,67 @@ >> > +/* >> > + * Copyright (c) 2017 Denis Obrezkov <denisobrez...@gmail.com> >> > + * >> > + * 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 <bsp/irq.h> >> > +#include <bsp/fatal.h> >> > +#include <bsp/fe310.h> >> > + >> > + >> > +static void FE310_clock_driver_support_install_isr( >> > + rtems_isr_entry Clock_isr >> > +) >> > +{ >> > + rtems_status_code sc = RTEMS_SUCCESSFUL; >> > + >> > + sc = rtems_interrupt_handler_install( >> > + 1, >> > + "Clock", >> > + RTEMS_INTERRUPT_UNIQUE, >> > + (rtems_interrupt_handler) Clock_isr, >> > + NULL >> > + ); >> > + if ( sc != RTEMS_SUCCESSFUL ) { >> > + rtems_fatal_error_occurred(0xdeadbeef); >> > + } >> > +} >> > + >> > +static void FE310_clock_driver_support_at_tick ( void ) >> > +{ >> Does the timer automatically re-load? > > No, we reload it in interrupt_dispatch routine. > I think now that it is not right. Should we place it here? Yes
>> >> > +} >> > + >> > +static void FE310_clock_init ( void ) >> > +{ >> > + volatile uint64_t * mtime = (volatile uint64_t *)0x0200bff8; >> > + volatile uint64_t * mtimecmp = (volatile uint64_t *)0x02004000; >> > + (*mtimecmp) = (*mtime) + FE310_CLOCK_PERIOD + 0x3000; >> > + asm volatile ("csrci mstatus, 0x8"); >> > + asm volatile ("li t0, 0x80\n\t" >> > + "csrs mie, t0"); >> > + asm volatile ("csrsi mstatus, 0x8"); >> It would be good to have inline functions for reading/writing all of >> these special purpose registers. >> >> > +} >> > + >> > +static void FE310_clock_driver_support_shutdown_hardware( void ) >> > +{ >> > +} >> > + >> > +#define Clock_driver_support_initialize_hardware() \ >> > + FE310_clock_init() >> > + >> > +#define CLOCK_DRIVER_USE_DUMMY_TIMECOUNTER >> > + >> > +#define Clock_driver_support_install_isr(isr,old) \ >> > + FE310_clock_driver_support_install_isr ( isr ) >> > + >> > +#define Clock_driver_support_at_tick() \ >> > + FE310_clock_driver_support_at_tick() >> > + >> > +#define Clock_driver_support_shutdown_hardware() \ >> > + FE310_clock_driver_support_shutdown_hardware() >> > + >> > +#include "../../../shared/clockdrv_shell.h" >> > + >> > -- >> > 2.1.4 >> > >> > _______________________________________________ >> > devel mailing list >> > devel@rtems.org >> > http://lists.rtems.org/mailman/listinfo/devel > > > > > -- > Regards, Denis Obrezkov _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel