From 384a4f6ef3892125fa67cdadeef1a5e9f7ec9078 Mon Sep 17 00:00:00 2001 From: acevest Date: Thu, 26 Sep 2019 20:11:59 +0800 Subject: [PATCH] enable set systick priority for bumblebee --- arch/risc-v/bumblebee/gcc/riscv_port.h | 4 +++- arch/risc-v/bumblebee/gcc/riscv_port_c.c | 12 +++++++----- arch/risc-v/common/tos_cpu.c | 2 +- arch/risc-v/rv32i/gcc/port_c.c | 7 +------ arch/risc-v/spike/gcc/riscv_port.h | 4 +++- arch/risc-v/spike/gcc/riscv_port_c.c | 8 +++++++- board/GD32VF103C_START/TOS_CONFIG/tos_config.h | 2 ++ board/QEMU_Spike/eclipse/demo/.cproject | 2 ++ .../eclipse/demo/.settings/language.settings.xml | 2 +- 9 files changed, 27 insertions(+), 16 deletions(-) diff --git a/arch/risc-v/bumblebee/gcc/riscv_port.h b/arch/risc-v/bumblebee/gcc/riscv_port.h index 2f974cbb..9484a704 100644 --- a/arch/risc-v/bumblebee/gcc/riscv_port.h +++ b/arch/risc-v/bumblebee/gcc/riscv_port.h @@ -24,6 +24,8 @@ #define CLINT_MTIMECMP 0x0008 #define CLINT_MTIME 0x0000 -void riscv_cpu_init(); +void port_cpu_init(); + +void port_systick_priority_set(uint32_t priority); #endif // _RISCV_PORT_H_ diff --git a/arch/risc-v/bumblebee/gcc/riscv_port_c.c b/arch/risc-v/bumblebee/gcc/riscv_port_c.c index 7e063ac2..2618918b 100644 --- a/arch/risc-v/bumblebee/gcc/riscv_port_c.c +++ b/arch/risc-v/bumblebee/gcc/riscv_port_c.c @@ -76,8 +76,8 @@ static void eclic_set_irq_priority(uint32_t source, uint8_t priority) { uint8_t pad = ~0; - pad >>= (8 - cicbits); - pad <<= (8 - cicbits); + pad <<= cicbits; + pad >>= cicbits; uint8_t intctrl_val = eclic_get_intctrl(CLIC_INT_TMR); @@ -90,12 +90,14 @@ static void eclic_set_irq_priority(uint32_t source, uint8_t priority) { eclic_set_intctrl(CLIC_INT_TMR, intctrl_val); } -void riscv_cpu_init() { +__PORT__ void port_cpu_init() { eclic_enable_interrupt(CLIC_INT_TMR); eclic_set_irq_level(CLIC_INT_TMR, 0); - eclic_set_irq_priority(CLIC_INT_TMR, 0); - +} + +__PORT__ void port_systick_priority_set(uint32_t priority) { + eclic_set_irq_priority(CLIC_INT_TMR, priority); } diff --git a/arch/risc-v/common/tos_cpu.c b/arch/risc-v/common/tos_cpu.c index d8cf5499..366f9b26 100644 --- a/arch/risc-v/common/tos_cpu.c +++ b/arch/risc-v/common/tos_cpu.c @@ -12,7 +12,7 @@ __KERNEL__ void cpu_init(void) { k_cpu_cycle_per_tick = TOS_CFG_CPU_CLOCK / k_cpu_tick_per_second; cpu_systick_init(k_cpu_cycle_per_tick); - riscv_cpu_init(); + port_cpu_init(); } __API__ cpu_cpsr_t tos_cpu_cpsr_save(void) diff --git a/arch/risc-v/rv32i/gcc/port_c.c b/arch/risc-v/rv32i/gcc/port_c.c index fc848646..4ed13159 100644 --- a/arch/risc-v/rv32i/gcc/port_c.c +++ b/arch/risc-v/rv32i/gcc/port_c.c @@ -1,6 +1,6 @@ +#include #include "riscv_encoding.h" #include "riscv_port.h" -#include __PORT__ void port_systick_config(uint32_t cycle_per_tick) { @@ -32,8 +32,3 @@ __PORT__ void port_systick_config(uint32_t cycle_per_tick) *(volatile uint32_t *)(CLINT_CTRL_ADDR + CLINT_MTIMECMP + 4) = 0xFFFFFFFF & (mtimecmp >> 32); *(volatile uint32_t *)(CLINT_CTRL_ADDR + CLINT_MTIMECMP + 0) = 0xFFFFFFFF & (mtimecmp >> 0); } - -__PORT__ void port_systick_priority_set(uint32_t prio) -{ - -} diff --git a/arch/risc-v/spike/gcc/riscv_port.h b/arch/risc-v/spike/gcc/riscv_port.h index b279275c..0e5d2f17 100644 --- a/arch/risc-v/spike/gcc/riscv_port.h +++ b/arch/risc-v/spike/gcc/riscv_port.h @@ -23,6 +23,8 @@ #define CLINT_MTIMECMP 0x4000 #define CLINT_MTIME 0xBFF8 -void riscv_cpu_init(); +void port_cpu_init(); + +void port_systick_priority_set(uint32_t priority); #endif // _RISCV_PORT_H_ diff --git a/arch/risc-v/spike/gcc/riscv_port_c.c b/arch/risc-v/spike/gcc/riscv_port_c.c index 1a9231db..99ee09de 100644 --- a/arch/risc-v/spike/gcc/riscv_port_c.c +++ b/arch/risc-v/spike/gcc/riscv_port_c.c @@ -1,3 +1,9 @@ -void riscv_cpu_init() { +#include "tos.h" + +__PORT__ void port_cpu_init() { + // DO NOTHING +} + +__PORT__ void port_systick_priority_set(uint32_t priority) { // DO NOTHING } diff --git a/board/GD32VF103C_START/TOS_CONFIG/tos_config.h b/board/GD32VF103C_START/TOS_CONFIG/tos_config.h index 1ec5efd2..f9b6b070 100644 --- a/board/GD32VF103C_START/TOS_CONFIG/tos_config.h +++ b/board/GD32VF103C_START/TOS_CONFIG/tos_config.h @@ -23,6 +23,8 @@ #define TOS_CFG_SEM_EN 1u // 配置TencentOS tiny是否开启信号量模块 +#define TOS_CFG_CPU_SYSTICK_PRIO 0xF + #if (TOS_CFG_QUEUE_EN > 0u) #define TOS_CFG_MSG_EN 1u #else diff --git a/board/QEMU_Spike/eclipse/demo/.cproject b/board/QEMU_Spike/eclipse/demo/.cproject index 54255d94..a892e24a 100644 --- a/board/QEMU_Spike/eclipse/demo/.cproject +++ b/board/QEMU_Spike/eclipse/demo/.cproject @@ -140,6 +140,8 @@ + + diff --git a/board/QEMU_Spike/eclipse/demo/.settings/language.settings.xml b/board/QEMU_Spike/eclipse/demo/.settings/language.settings.xml index 63169288..05946d95 100644 --- a/board/QEMU_Spike/eclipse/demo/.settings/language.settings.xml +++ b/board/QEMU_Spike/eclipse/demo/.settings/language.settings.xml @@ -11,7 +11,7 @@ - +