From 9e9b644e29bb13aaa34398143a21d5da27d930bf Mon Sep 17 00:00:00 2001 From: Stanislaw Kaushanski Date: Wed, 16 Sep 2020 15:12:21 +0200 Subject: [PATCH] remove unused timer interrupt handler --- raven/Makefile | 2 +- raven/hello_raven | Bin 150920 -> 117056 bytes raven/src/hello_raven.cpp | 44 +++++++------------------------------- raven/src/hello_raven.h | 1 - raven/src/hifive1_io.cpp | 16 -------------- raven/src/hifive1_io.h | 26 ---------------------- 6 files changed, 9 insertions(+), 80 deletions(-) delete mode 100644 raven/src/hifive1_io.cpp delete mode 100644 raven/src/hifive1_io.h diff --git a/raven/Makefile b/raven/Makefile index 6729b90..2d43826 100644 --- a/raven/Makefile +++ b/raven/Makefile @@ -3,7 +3,7 @@ TARGET = hello_raven C_SRCS = $(wildcard src/*.c) $(BSP_BASE)/drivers/fe300prci/fe300prci_driver.c $(BSP_BASE)/drivers/plic/plic_driver.c CXX_SRCS = $(wildcard src/*.cpp) HEADERS = $(wildcard src/*.h) -CFLAGS = -g -fno-builtin-printf -DUSE_PLIC -DUSE_M_TIME -DNO_INIT -I./src +CFLAGS = -g -fno-builtin-printf -DUSE_PLIC -I./src CXXFLAGS = -fno-use-cxa-atexit LDFLAGS = -Wl,--wrap=printf LDFLAGS += -g -lstdc++ -fno-use-cxa-atexit -march=$(RISCV_ARCH) -mabi=$(RISCV_ABI) -mcmodel=medany diff --git a/raven/hello_raven b/raven/hello_raven index 7f2c204c90795d6664b6c9783f8354ca5b6081cf..9f30db3b8201ea77e357c1d3dd5041acdaf4104a 100755 GIT binary patch delta 25864 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
  • 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 Ag#Z8m delta 59043 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 diff --git a/raven/src/hello_raven.cpp b/raven/src/hello_raven.cpp index 60f558e..da35301 100644 --- a/raven/src/hello_raven.cpp +++ b/raven/src/hello_raven.cpp @@ -5,10 +5,7 @@ #include #include - -#include "hifive1_io.h" - - +#include #define IOF_ENABLE_TERMINAL (0x30000) @@ -34,21 +31,6 @@ extern "C" void handle_m_ext_interrupt() { exit(1 + (uintptr_t) int_num); PLIC_complete_interrupt(&g_plic, int_num); } -/*! \brief mtime interval interrupt - * - */ -extern "C" void handle_m_time_interrupt(){ - clear_csr(mie, MIP_MTIP); - // Reset the timer for 3s in the future. - // This also clears the existing timer interrupt. - volatile uint64_t * mtime = (uint64_t*) (CLINT_CTRL_ADDR + CLINT_MTIME); - volatile uint64_t * mtimecmp = (uint64_t*) (CLINT_CTRL_ADDR + CLINT_MTIMECMP); - uint64_t now = *mtime; - uint64_t then = now + RTC_FREQ; - *mtimecmp = then; - // Re-enable the timer interrupt. - set_csr(mie, MIP_MTIP); -} /*! \brief dummy interrupt handler * */ @@ -83,9 +65,10 @@ static void msi_interrupt_handler(){ * */ void platform_init(){ - // configure clocks - PRCI_use_hfxosc(1); // is equivalent to - qspi1::sckdiv_reg() = 8; + // UART init section TODO: clarify how to get the functions from init.c? + GPIO_REG(GPIO_IOF_SEL) &= ~IOF0_UART0_MASK; + GPIO_REG(GPIO_IOF_EN) |= IOF0_UART0_MASK; + UART0_REG(UART_REG_TXCTRL) |= UART_TXEN; F_CPU=PRCI_measure_mcycle_freq(20, RTC_FREQ); printf("core freq at %d Hz\n", F_CPU); @@ -98,18 +81,10 @@ void platform_init(){ clear_csr(mie, MIP_MTIP); for (auto& h:g_ext_interrupt_handlers) h=no_interrupt_handler; configure_irq(1, msi_interrupt_handler); - // Set the machine timer to go off in 1 second. - volatile uint64_t * mtime = (uint64_t*) (CLINT_CTRL_ADDR + CLINT_MTIME); - volatile uint64_t * mtimecmp = (uint64_t*) (CLINT_CTRL_ADDR + CLINT_MTIMECMP); - uint64_t now = *mtime; - uint64_t then = now + RTC_FREQ; - *mtimecmp = then; - // Enable the Machine-External bit in MIE - set_csr(mie, MIP_MEIP); - // Enable the Machine-Timer bit in MIE - set_csr(mie, MIP_MTIP); // Enable interrupts in general. set_csr(mstatus, MSTATUS_MIE); + // Enable the Machine-External bit in MIE + set_csr(mie, MIP_MEIP); } /*! \brief main function @@ -121,15 +96,12 @@ int main() { int * plic_b_pending = (int *)(0xA0000000+PLIC_PENDING_OFFSET); int * local_sync_bit = (int *)(local_mem_base + 10); - int * target_sync_bit = (int *)(target_mem_base + 10); + volatile int * target_sync_bit = (int *)(target_mem_base + 10); int hartid = read_csr(mhartid); *local_sync_bit = 0; - GPIO_REG(GPIO_IOF_EN) |= IOF_ENABLE_TERMINAL; // enable GPIO connection to the terminal platform_init(); - // Enable the Machine-External bit in MIE - set_csr(mie, MIP_MEIP); if (hartid == 0) { int val_a = 5; diff --git a/raven/src/hello_raven.h b/raven/src/hello_raven.h index ec287f6..f19e20f 100644 --- a/raven/src/hello_raven.h +++ b/raven/src/hello_raven.h @@ -2,6 +2,5 @@ #define HELLO_RAVEN_H_ extern "C" void handle_m_ext_interrupt(); -extern "C" void handle_m_time_interrupt(); #endif /* HELLO_RAVEN_H_ */ diff --git a/raven/src/hifive1_io.cpp b/raven/src/hifive1_io.cpp deleted file mode 100644 index 2822762..0000000 --- a/raven/src/hifive1_io.cpp +++ /dev/null @@ -1,16 +0,0 @@ -/* - * peripherals.c - * - * Created on: 10.09.2018 - * Author: eyck - */ - -#include "hifive1_io.h" - -template<> volatile bool qspi0::spi_active=false; -template<> volatile bool qspi1::spi_active=false; -template<> volatile bool qspi2::spi_active=false; -template<> volatile bool pwm0::pwm_active=false; -template<> volatile bool pwm1::pwm_active=false; -template<> volatile bool pwm2::pwm_active=false; - diff --git a/raven/src/hifive1_io.h b/raven/src/hifive1_io.h deleted file mode 100644 index 9dc4325..0000000 --- a/raven/src/hifive1_io.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * peripherals.h - * - * Created on: 29.07.2018 - * Author: eyck - */ - -#ifndef HIFIVE1_IO_H_ -#define HIFIVE1_IO_H_ - -#include "io/gpio.h" -#include "io/spi.h" -#include "io/pwm.h" -#include "io/uart.h" - -using gpio0=gpio_regs<0x10012000>; -using uart0=uart_regs<0x10013000>; -using uart1=uart_regs<0x10023000>; -using qspi0=spi_regs<0x10014000>; -using qspi1=spi_regs<0x10024000>; -using qspi2=spi_regs<0x10034000>; -using pwm0 =pwm_regs<0x10015000>; -using pwm1 =pwm_regs<0x10025000>; -using pwm2 =pwm_regs<0x10035000>; - -#endif /* HIFIVE1_IO_H_ */