From a52bb94ed241c19eee517bfc0843e2143262fd6f Mon Sep 17 00:00:00 2001 From: acevest Date: Thu, 3 Oct 2019 15:01:46 +0800 Subject: [PATCH] initialize the clock tree of GD32VF103C_START to 108MHz --- arch/risc-v/bumblebee/gcc/riscv_port_c.c | 15 +++--- board/GD32VF103C_START/BSP/Src/mcu_init.c | 3 ++ .../GD32VF103C_START/TOS_CONFIG/tos_config.h | 48 +++++++++++++------ 3 files changed, 44 insertions(+), 22 deletions(-) diff --git a/arch/risc-v/bumblebee/gcc/riscv_port_c.c b/arch/risc-v/bumblebee/gcc/riscv_port_c.c index 2618918b..4ab8902d 100644 --- a/arch/risc-v/bumblebee/gcc/riscv_port_c.c +++ b/arch/risc-v/bumblebee/gcc/riscv_port_c.c @@ -1,4 +1,5 @@ -#include "tos.h" +#include +#include #define ECLIC_ADDR_BASE 0xD2000000 #define CLIC_INT_TMR 0x07 @@ -18,18 +19,18 @@ #define ECLIC_CFG_NLBITS_LSB 1 -static uint8_t elci_get_clic_int_ctl_bits() { +static uint8_t eclic_get_clic_int_ctl_bits() { uint32_t bits = *(volatile uint32_t*)(ECLIC_ADDR_BASE+ECLIC_INFO_OFFSET); bits >>= 21; return (uint8_t) bits; } -static uint8_t elci_get_nlbits() { +static uint8_t eclic_get_nlbits() { uint8_t nlbits = *(volatile uint8_t*)(ECLIC_ADDR_BASE+ECLIC_CFG_OFFSET); nlbits = (nlbits & ECLIC_CFG_NLBITS_MASK) >> ECLIC_CFG_NLBITS_LSB; - uint8_t cicbits = elci_get_clic_int_ctl_bits(); + uint8_t cicbits = eclic_get_clic_int_ctl_bits(); if(nlbits > cicbits) { nlbits = cicbits; } @@ -51,7 +52,7 @@ static void eclic_enable_interrupt(uint32_t source) { } static void eclic_set_irq_level(uint32_t source, uint8_t level) { - uint8_t nlbits = elci_get_nlbits(); + uint8_t nlbits = eclic_get_nlbits(); if (nlbits == 0) { return ; @@ -67,8 +68,8 @@ static void eclic_set_irq_level(uint32_t source, uint8_t level) { } static void eclic_set_irq_priority(uint32_t source, uint8_t priority) { - uint8_t nlbits = elci_get_nlbits(); - uint8_t cicbits= elci_get_clic_int_ctl_bits(); + uint8_t nlbits = eclic_get_nlbits(); + uint8_t cicbits= eclic_get_clic_int_ctl_bits(); if (nlbits >= cicbits) { return ; diff --git a/board/GD32VF103C_START/BSP/Src/mcu_init.c b/board/GD32VF103C_START/BSP/Src/mcu_init.c index 57aa3861..5bd037cb 100644 --- a/board/GD32VF103C_START/BSP/Src/mcu_init.c +++ b/board/GD32VF103C_START/BSP/Src/mcu_init.c @@ -1,6 +1,9 @@ #include "mcu_init.h" void board_init() { + + SystemInit(); + rcu_periph_clock_enable(RCU_GPIOA); gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_7); diff --git a/board/GD32VF103C_START/TOS_CONFIG/tos_config.h b/board/GD32VF103C_START/TOS_CONFIG/tos_config.h index f9b6b070..939447d3 100644 --- a/board/GD32VF103C_START/TOS_CONFIG/tos_config.h +++ b/board/GD32VF103C_START/TOS_CONFIG/tos_config.h @@ -1,27 +1,38 @@ #ifndef INC_TOS_CONFIG_H_ #define INC_TOS_CONFIG_H_ +#include "gd32vf103.h" #include "stddef.h" -#define TOS_CFG_TASK_PRIO_MAX 10u // 配置TencentOS tiny默认支持的最大优先级数量 +// 配置TencentOS tiny默认支持的最大优先级数量 +#define TOS_CFG_TASK_PRIO_MAX 10u -#define TOS_CFG_ROUND_ROBIN_EN 0u // 配置TencentOS tiny的内核是否开启时间片轮转 +// 配置TencentOS tiny的内核是否开启时间片轮转 +#define TOS_CFG_ROUND_ROBIN_EN 0u -#define TOS_CFG_OBJECT_VERIFY 0u // 配置TencentOS tiny是否校验指针合法 +// 配置TencentOS tiny是否校验指针合法 +#define TOS_CFG_OBJECT_VERIFY 0u -#define TOS_CFG_EVENT_EN 1u // TencentOS tiny 事件模块功能宏 +// TencentOS tiny 事件模块功能宏 +#define TOS_CFG_EVENT_EN 1u -#define TOS_CFG_MMHEAP_EN 1u // 配置TencentOS tiny是否开启动态内存模块 +// 配置TencentOS tiny是否开启动态内存模块 +#define TOS_CFG_MMHEAP_EN 1u -#define TOS_CFG_MMHEAP_POOL_SIZE 8192 // 配置TencentOS tiny动态内存池大小 +// 配置TencentOS tiny动态内存池大小 +#define TOS_CFG_MMHEAP_POOL_SIZE 8192 -#define TOS_CFG_MUTEX_EN 1u // 配置TencentOS tiny是否开启互斥锁模块 +// 配置TencentOS tiny是否开启互斥锁模块 +#define TOS_CFG_MUTEX_EN 1u -#define TOS_CFG_QUEUE_EN 1u // 配置TencentOS tiny是否开启队列模块 +// 配置TencentOS tiny是否开启队列模块 +#define TOS_CFG_QUEUE_EN 1u -#define TOS_CFG_TIMER_EN 0u // 配置TencentOS tiny是否开启软件定时器模块 +// 配置TencentOS tiny是否开启软件定时器模块 +#define TOS_CFG_TIMER_EN 0u -#define TOS_CFG_SEM_EN 1u // 配置TencentOS tiny是否开启信号量模块 +// 配置TencentOS tiny是否开启信号量模块 +#define TOS_CFG_SEM_EN 1u #define TOS_CFG_CPU_SYSTICK_PRIO 0xF @@ -31,15 +42,22 @@ #define TOS_CFG_MSG_EN 0u #endif -#define TOS_CFG_MSG_POOL_SIZE 10u // 配置TencentOS tiny消息队列大小 +// 配置TencentOS tiny消息队列大小 +#define TOS_CFG_MSG_POOL_SIZE 10u -#define TOS_CFG_IDLE_TASK_STK_SIZE 512u // 配置TencentOS tiny空闲任务栈大小 +// 配置TencentOS tiny空闲任务栈大小 +#define TOS_CFG_IDLE_TASK_STK_SIZE 512u -#define TOS_CFG_CPU_TICK_PER_SECOND 1000u // 配置TencentOS tiny的tick频率 +// 配置TencentOS tiny的tick频率 +#define TOS_CFG_CPU_TICK_PER_SECOND 1000u -#define TOS_CFG_CPU_CLOCK (108000000/4) // 配置TencentOS tiny CPU频率 +// 配置TencentOS tiny CPU频率 +// 除4的原因是,Bumblebee内核通过core_clk_aon四分频来更新mtime寄存器 +// 具体信息参见《Bumblebee内核简明数据手册》 +#define TOS_CFG_CPU_CLOCK (SystemCoreClock/4) -#define TOS_CFG_TIMER_AS_PROC 1u // 配置是否将TIMER配置成函数模式 +// 配置是否将TIMER配置成函数模式 +#define TOS_CFG_TIMER_AS_PROC 1u #define TOS_CFG_VFS_EN 1u