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 7f2c204..9f30db3 100755 Binary files a/raven/hello_raven and b/raven/hello_raven differ 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_ */