[PATCH 10/15] HiFive1: add clock driver support

Denis Obrezkov denisobrezkov at gmail.com
Wed Aug 16 15:13:01 UTC 2017


---
 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 <denisobrezkov at 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 )
+{
+}
+
+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");
+}
+
+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



More information about the devel mailing list