Merge branch 'master' of https://github.com/RT-Thread/rt-thread into nuvoton
This commit is contained in:
commit
89c1c3f271
|
@ -1,12 +1,12 @@
|
||||||
# Nuclei RISC-V Processor Support Package
|
# Nuclei RISC-V Processor Support Package
|
||||||
|
|
||||||
This directory provided support for [Nuclei RISC-V Processor](https://nucleisys.com/) based board,
|
This directory provided support for [Nuclei RISC-V Processor](https://nucleisys.com/) based boards,
|
||||||
currently we mainly provided the following board support packages.
|
currently we mainly provided the following board support packages.
|
||||||
|
|
||||||
| **BSP** | **Development Board Name** |
|
| **BSP** | **Development Board Name** |
|
||||||
| :----------------------------------- | :-------------------------------------------------------------------------------------------------------------------------- |
|
| :----------------------------------- | :--------------------------------------------------------------------------------------------------------- |
|
||||||
| [gd32vf103_rvstar](gd32vf103_rvstar) | [Nuclei RV-STAR Arduino Compatible Development Board](https://www.riscv-mcu.com/quickstart-quickstart-index-u-RV_STAR.html) |
|
| [gd32vf103_rvstar](gd32vf103_rvstar) | [Nuclei RV-STAR Arduino Compatible Development Board](https://www.rvmcu.com/quickstart-doc-u-rvstar.html) |
|
||||||
| [hbird_eval](hbird_eval) | [Nuclei HummingBird FPGA Evaluation Development Board](https://nucleisys.com/developboard.php) |
|
| [hbird_eval](hbird_eval) | [Nuclei HummingBird FPGA Evaluation Development Board](https://nucleisys.com/developboard.php#ddr200t) |
|
||||||
|
|
||||||
**If you want to learn more about Nuclei Processors, please click the following links:**
|
**If you want to learn more about Nuclei Processors, please click the following links:**
|
||||||
|
|
||||||
|
@ -16,6 +16,6 @@ currently we mainly provided the following board support packages.
|
||||||
* [RISC-V MCU Open Source Software Organization in Github](https://github.com/riscv-mcu/)
|
* [RISC-V MCU Open Source Software Organization in Github](https://github.com/riscv-mcu/)
|
||||||
* [RISC-V MCU Open Source Software Organization in Gitee](https://gitee.com/riscv-mcu/)
|
* [RISC-V MCU Open Source Software Organization in Gitee](https://gitee.com/riscv-mcu/)
|
||||||
* [Professional Nuclei Processor Development Boards](https://nucleisys.com/developboard.php)
|
* [Professional Nuclei Processor Development Boards](https://nucleisys.com/developboard.php)
|
||||||
* [Comprehensive Documents and Development Tools](https://nucleisys.com/download.php)
|
* [Comprehensive Documents and Development Tools](https://nucleisys.com/download.php#tools)
|
||||||
* [Active RISC-V IP and MCU Community](https://www.rvmcu.com/)
|
* [Active RISC-V IP and MCU Community](https://www.rvmcu.com/)
|
||||||
* [Professional University Program](https://nucleisys.com/campus.php)
|
* [Professional University Program](https://nucleisys.com/campus.php)
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
**RVSTAR开发板** 是由[芯来科技Nuclei](https://nucleisys.com/)公司推出的基于采用芯来科技RISC-V架构处理器芯片的GD32VF103的开发板。
|
**RVSTAR开发板** 是由[芯来科技Nuclei](https://nucleisys.com/)公司推出的基于采用芯来科技RISC-V架构处理器芯片的GD32VF103的开发板。
|
||||||
|
|
||||||
更多关于 **RVSTAR开发板** 开发板的详细资料请参见 [RVSTAR开发板快速入门](https://www.rvmcu.com/quickstart-quickstart-index-u-RV_STAR.html)
|
更多关于 **RVSTAR开发板** 开发板的详细资料请参见 [RVSTAR开发板快速入门](https://www.rvmcu.com/quickstart-doc-u-rvstar.html)
|
||||||
|
|
||||||
### 板载资源
|
### 板载资源
|
||||||
|
|
||||||
|
@ -103,7 +103,7 @@ A debugging session is active.
|
||||||
Inferior 1 [Remote target] will be detached.
|
Inferior 1 [Remote target] will be detached.
|
||||||
|
|
||||||
Quit anyway? (y or n) [answered Y; input not from terminal]
|
Quit anyway? (y or n) [answered Y; input not from terminal]
|
||||||
Remote communication error. Target disconnected.: Success.
|
[Inferior 1 (Remote target) detached]
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
下载程序之后, 连接串口(115200-N-8-1), 可以看到 RT-Thread 的输出信息:
|
下载程序之后, 连接串口(115200-N-8-1), 可以看到 RT-Thread 的输出信息:
|
||||||
|
|
|
@ -75,7 +75,7 @@ if run_target in SUPPORT_RUN_TARGETS:
|
||||||
upload_cmd = '{} {} -ex "set remotetimeout 240" \
|
upload_cmd = '{} {} -ex "set remotetimeout 240" \
|
||||||
-ex "target remote | openocd --pipe -f {}" \
|
-ex "target remote | openocd --pipe -f {}" \
|
||||||
--batch -ex "monitor halt" -ex "monitor flash protect 0 0 last off" -ex "load" \
|
--batch -ex "monitor halt" -ex "monitor flash protect 0 0 last off" -ex "load" \
|
||||||
-ex "monitor resume" -ex "monitor shutdown" -ex "quit"'.format(GDB, TARGET, openocd_cfg)
|
-ex "monitor resume" -ex "quit"'.format(GDB, TARGET, openocd_cfg)
|
||||||
print("Upload application {} using openocd and gdb".format(TARGET))
|
print("Upload application {} using openocd and gdb".format(TARGET))
|
||||||
print(upload_cmd)
|
print(upload_cmd)
|
||||||
os.system(upload_cmd)
|
os.system(upload_cmd)
|
||||||
|
|
|
@ -1,10 +1,14 @@
|
||||||
# 芯来科技蜂鸟FPGA评估板 #
|
# 芯来科技蜂鸟FPGA评估板
|
||||||
|
|
||||||
## 简介
|
## 简介
|
||||||
|
|
||||||
**蜂鸟FPGA评估板** 是由芯来科技公司推出的用于测试评估芯来RISC-V内核处理器的FPGA评估板。
|
**蜂鸟FPGA系列评估板** 是由芯来科技公司推出的用于一系列测试评估芯来RISC-V内核处理器的FPGA评估板。
|
||||||
|
|
||||||
更多关于 **蜂鸟FPGA评估板** 开发板的详细资料请参见 [蜂鸟FPGA评估板](https://nucleisys.com/developboard.php)
|
更多关于 **蜂鸟FPGA评估板** 开发板的详细资料请参见:
|
||||||
|
|
||||||
|
* [Nuclei DDR200T开发板](https://nucleisys.com/developboard.php#ddr200t)
|
||||||
|
* [Nuclei MCU200T开发板](https://nucleisys.com/developboard.php#mcu200t)
|
||||||
|
* [蜂鸟开发板](https://nucleisys.com/developboard.php#hbird100t)
|
||||||
|
|
||||||
### 板载资源
|
### 板载资源
|
||||||
|
|
||||||
|
@ -57,7 +61,9 @@ export PATH=~/Software/Nuclei/gcc/bin:~/Software/Nuclei/openocd/bin:$PATH
|
||||||
|
|
||||||
## 烧写及执行
|
## 烧写及执行
|
||||||
|
|
||||||
### [驱动设置](https://nucleisys.com/developboard.php)
|
### 驱动设置
|
||||||
|
|
||||||
|
驱动安装设置,请参考[Nuclei FPGA开发板介绍](https://nucleisys.com/upload/files/fpga/doc/Nuclei_FPGA_DebugKit_Intro_202012.pdf)
|
||||||
|
|
||||||
### 编译程序
|
### 编译程序
|
||||||
|
|
||||||
|
@ -110,7 +116,7 @@ A debugging session is active.
|
||||||
Inferior 1 [Remote target] will be detached.
|
Inferior 1 [Remote target] will be detached.
|
||||||
|
|
||||||
Quit anyway? (y or n) [answered Y; input not from terminal]
|
Quit anyway? (y or n) [answered Y; input not from terminal]
|
||||||
Remote communication error. Target disconnected.: Success.
|
[Inferior 1 (Remote target) detached]
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
下载程序之后, 连接**串口(57600-N-8-1)**, 可以看到 RT-Thread 的输出信息:
|
下载程序之后, 连接**串口(57600-N-8-1)**, 可以看到 RT-Thread 的输出信息:
|
||||||
|
|
|
@ -75,7 +75,7 @@ if run_target in SUPPORT_RUN_TARGETS:
|
||||||
upload_cmd = '{} {} -ex "set remotetimeout 240" \
|
upload_cmd = '{} {} -ex "set remotetimeout 240" \
|
||||||
-ex "target remote | openocd --pipe -f {}" \
|
-ex "target remote | openocd --pipe -f {}" \
|
||||||
--batch -ex "monitor halt" -ex "monitor flash protect 0 0 last off" -ex "load" \
|
--batch -ex "monitor halt" -ex "monitor flash protect 0 0 last off" -ex "load" \
|
||||||
-ex "monitor resume" -ex "monitor shutdown" -ex "quit"'.format(GDB, TARGET, openocd_cfg)
|
-ex "monitor resume" -ex "quit"'.format(GDB, TARGET, openocd_cfg)
|
||||||
print("Upload application {} using openocd and gdb".format(TARGET))
|
print("Upload application {} using openocd and gdb".format(TARGET))
|
||||||
print(upload_cmd)
|
print(upload_cmd)
|
||||||
os.system(upload_cmd)
|
os.system(upload_cmd)
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
* 2020-10-14 Dozingfiretruck Porting for stm32wbxx
|
* 2020-10-14 Dozingfiretruck Porting for stm32wbxx
|
||||||
* 2020-11-26 thread-liu add hash
|
* 2020-11-26 thread-liu add hash
|
||||||
* 2020-11-26 thread-liu add cryp
|
* 2020-11-26 thread-liu add cryp
|
||||||
|
* 2020-12-11 WKJay fix build problem
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <rtthread.h>
|
#include <rtthread.h>
|
||||||
|
@ -628,6 +629,7 @@ static void _crypto_reset(struct rt_hwcrypto_ctx *ctx)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(HASH2_IN_DMA_INSTANCE)
|
||||||
void HASH2_DMA_IN_IRQHandler(void)
|
void HASH2_DMA_IN_IRQHandler(void)
|
||||||
{
|
{
|
||||||
extern DMA_HandleTypeDef hdma_hash_in;
|
extern DMA_HandleTypeDef hdma_hash_in;
|
||||||
|
@ -640,7 +642,9 @@ void HASH2_DMA_IN_IRQHandler(void)
|
||||||
/* leave interrupt */
|
/* leave interrupt */
|
||||||
rt_interrupt_leave();
|
rt_interrupt_leave();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(CRYP2_IN_DMA_INSTANCE)
|
||||||
void CRYP2_DMA_IN_IRQHandler(void)
|
void CRYP2_DMA_IN_IRQHandler(void)
|
||||||
{
|
{
|
||||||
extern DMA_HandleTypeDef hdma_cryp_in;
|
extern DMA_HandleTypeDef hdma_cryp_in;
|
||||||
|
@ -653,7 +657,9 @@ void CRYP2_DMA_IN_IRQHandler(void)
|
||||||
/* leave interrupt */
|
/* leave interrupt */
|
||||||
rt_interrupt_leave();
|
rt_interrupt_leave();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (CRYP2_OUT_DMA_INSTANCE)
|
||||||
void CRYP2_DMA_OUT_IRQHandler(void)
|
void CRYP2_DMA_OUT_IRQHandler(void)
|
||||||
{
|
{
|
||||||
extern DMA_HandleTypeDef hdma_cryp_out;
|
extern DMA_HandleTypeDef hdma_cryp_out;
|
||||||
|
@ -666,6 +672,7 @@ void CRYP2_DMA_OUT_IRQHandler(void)
|
||||||
/* leave interrupt */
|
/* leave interrupt */
|
||||||
rt_interrupt_leave();
|
rt_interrupt_leave();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static const struct rt_hwcrypto_ops _ops =
|
static const struct rt_hwcrypto_ops _ops =
|
||||||
{
|
{
|
||||||
|
|
|
@ -42,7 +42,7 @@ if PLATFORM == 'gcc':
|
||||||
OBJCPY = PREFIX + 'objcopy'
|
OBJCPY = PREFIX + 'objcopy'
|
||||||
STRIP = PREFIX + 'strip'
|
STRIP = PREFIX + 'strip'
|
||||||
|
|
||||||
DEVICE = ' -mcpu=' + CPU + ' -mthumb -mfpu=fpv5-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections'
|
DEVICE = ' -mcpu=' + CPU + ' -mthumb -mfpu=fpv5-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections'
|
||||||
CFLAGS = DEVICE + ' -g -Wall'
|
CFLAGS = DEVICE + ' -g -Wall'
|
||||||
AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb '
|
AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb '
|
||||||
LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,Reset_Handler -T board/linker_scripts/link.lds'
|
LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,Reset_Handler -T board/linker_scripts/link.lds'
|
||||||
|
|
|
@ -35,7 +35,8 @@ static char *const sensor_name_str[] =
|
||||||
"forc_", /* Force sensor */
|
"forc_", /* Force sensor */
|
||||||
"dust_", /* Dust sensor */
|
"dust_", /* Dust sensor */
|
||||||
"eco2_", /* eCO2 sensor */
|
"eco2_", /* eCO2 sensor */
|
||||||
"gnss_" /* GPS/GNSS sensor */
|
"gnss_", /* GPS/GNSS sensor */
|
||||||
|
"tof_" /* TOF sensor */
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Sensor interrupt correlation function */
|
/* Sensor interrupt correlation function */
|
||||||
|
|
|
@ -48,6 +48,7 @@ extern "C" {
|
||||||
#define RT_SENSOR_CLASS_DUST (14) /* Dust sensor */
|
#define RT_SENSOR_CLASS_DUST (14) /* Dust sensor */
|
||||||
#define RT_SENSOR_CLASS_ECO2 (15) /* eCO2 sensor */
|
#define RT_SENSOR_CLASS_ECO2 (15) /* eCO2 sensor */
|
||||||
#define RT_SENSOR_CLASS_GNSS (16) /* GPS/GNSS sensor */
|
#define RT_SENSOR_CLASS_GNSS (16) /* GPS/GNSS sensor */
|
||||||
|
#define RT_SENSOR_CLASS_TOF (17) /* TOF sensor */
|
||||||
|
|
||||||
/* Sensor vendor types */
|
/* Sensor vendor types */
|
||||||
|
|
||||||
|
|
|
@ -50,6 +50,7 @@ static void sensor_show_data(rt_size_t num, rt_sensor_t sensor, struct rt_sensor
|
||||||
LOG_I("num:%3d, light:%5d lux, timestamp:%5d", num, sensor_data->data.light, sensor_data->timestamp);
|
LOG_I("num:%3d, light:%5d lux, timestamp:%5d", num, sensor_data->data.light, sensor_data->timestamp);
|
||||||
break;
|
break;
|
||||||
case RT_SENSOR_CLASS_PROXIMITY:
|
case RT_SENSOR_CLASS_PROXIMITY:
|
||||||
|
case RT_SENSOR_CLASS_TOF:
|
||||||
LOG_I("num:%3d, distance:%5d, timestamp:%5d", num, sensor_data->data.proximity, sensor_data->timestamp);
|
LOG_I("num:%3d, distance:%5d, timestamp:%5d", num, sensor_data->data.proximity, sensor_data->timestamp);
|
||||||
break;
|
break;
|
||||||
case RT_SENSOR_CLASS_HR:
|
case RT_SENSOR_CLASS_HR:
|
||||||
|
|
|
@ -27,6 +27,8 @@
|
||||||
* The context switch is managed by the threads.So the task stack does not have to be managed directly,
|
* The context switch is managed by the threads.So the task stack does not have to be managed directly,
|
||||||
* although the stack stack is still used to hold an WinThreadState structure this is the only thing it
|
* although the stack stack is still used to hold an WinThreadState structure this is the only thing it
|
||||||
* will be ever hold.
|
* will be ever hold.
|
||||||
|
* YieldEvent used to make sure the thread does not execute before asynchronous SuspendThread() operation
|
||||||
|
* actually being performed.
|
||||||
* the structure indirectly maps the task handle to a thread handle
|
* the structure indirectly maps the task handle to a thread handle
|
||||||
*********************************************************************************************************
|
*********************************************************************************************************
|
||||||
*/
|
*/
|
||||||
|
@ -35,6 +37,7 @@ typedef struct
|
||||||
void *Param; //Thread param
|
void *Param; //Thread param
|
||||||
void (*Entry)(void *); //Thread entry
|
void (*Entry)(void *); //Thread entry
|
||||||
void (*Exit)(void); //Thread exit
|
void (*Exit)(void); //Thread exit
|
||||||
|
HANDLE YieldEvent;
|
||||||
HANDLE ThreadHandle;
|
HANDLE ThreadHandle;
|
||||||
DWORD ThreadID;
|
DWORD ThreadID;
|
||||||
}win_thread_t;
|
}win_thread_t;
|
||||||
|
@ -171,6 +174,11 @@ rt_uint8_t* rt_hw_stack_init(void *pEntry,void *pParam,rt_uint8_t *pStackAddr,vo
|
||||||
pWinThread->ThreadHandle = NULL;
|
pWinThread->ThreadHandle = NULL;
|
||||||
pWinThread->ThreadID = 0;
|
pWinThread->ThreadID = 0;
|
||||||
|
|
||||||
|
pWinThread->YieldEvent = CreateEvent(NULL,
|
||||||
|
FALSE,
|
||||||
|
FALSE,
|
||||||
|
NULL);
|
||||||
|
|
||||||
/* Create the winthread */
|
/* Create the winthread */
|
||||||
pWinThread->ThreadHandle = CreateThread(NULL,
|
pWinThread->ThreadHandle = CreateThread(NULL,
|
||||||
0,
|
0,
|
||||||
|
@ -277,6 +285,19 @@ void rt_hw_context_switch(rt_uint32_t from,
|
||||||
//trigger YIELD exception(cause contex switch)
|
//trigger YIELD exception(cause contex switch)
|
||||||
TriggerSimulateInterrupt(CPU_INTERRUPT_YIELD);
|
TriggerSimulateInterrupt(CPU_INTERRUPT_YIELD);
|
||||||
|
|
||||||
|
// make sure the event is not already signaled
|
||||||
|
win_thread_t *WinThread = (win_thread_t *)rt_interrupt_from_thread;
|
||||||
|
ResetEvent(WinThread->YieldEvent);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* enable interrupt in advance so that scheduler can be executed.please note that interrupt
|
||||||
|
* maybe disable twice before.
|
||||||
|
*/
|
||||||
|
rt_hw_interrupt_enable(0);
|
||||||
|
rt_hw_interrupt_enable(0);
|
||||||
|
|
||||||
|
// wait to suspend.
|
||||||
|
WaitForSingleObject(WinThread->YieldEvent, INFINITE);
|
||||||
} /*** rt_hw_context_switch ***/
|
} /*** rt_hw_context_switch ***/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -578,6 +599,7 @@ void RegisterSimulateInterrupt(rt_uint32_t IntIndex,rt_uint32_t (*IntHandler)(vo
|
||||||
if ((WinThreadFrom != NULL) && (WinThreadFrom->ThreadHandle != NULL))
|
if ((WinThreadFrom != NULL) && (WinThreadFrom->ThreadHandle != NULL))
|
||||||
{
|
{
|
||||||
SuspendThread(WinThreadFrom->ThreadHandle);
|
SuspendThread(WinThreadFrom->ThreadHandle);
|
||||||
|
SetEvent(WinThreadFrom->YieldEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
ResumeThread(WinThreadTo->ThreadHandle);
|
ResumeThread(WinThreadTo->ThreadHandle);
|
||||||
|
|
|
@ -17,8 +17,8 @@
|
||||||
* CPU INTERRUPT PRIORITY
|
* CPU INTERRUPT PRIORITY
|
||||||
*********************************************************************************************************
|
*********************************************************************************************************
|
||||||
*/
|
*/
|
||||||
#define CPU_INTERRUPT_YIELD 0x00
|
#define CPU_INTERRUPT_YIELD 0x01 // should be set to the lowest priority.
|
||||||
#define CPU_INTERRUPT_TICK 0x01
|
#define CPU_INTERRUPT_TICK 0x00
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue