[bsp/ESP32_C3] Add the gpio driver and readme.md (#6027)
This commit is contained in:
parent
fb3f835089
commit
433f0c7721
|
@ -1,20 +1,37 @@
|
||||||
From 8c8c4bd282ed5bf359ef1c0eaeace4c4fbe8ff52 Mon Sep 17 00:00:00 2001
|
From 317ee995e9d530587bfb14439b3b1ee38d1afe77 Mon Sep 17 00:00:00 2001
|
||||||
From: supperthomas <78900636@qq.com>
|
From: supperthomas <78900636@qq.com>
|
||||||
Date: Mon, 18 Apr 2022 22:59:02 +0800
|
Date: Fri, 6 May 2022 23:06:28 +0800
|
||||||
Subject: [PATCH] add fixed of rtthread
|
Subject: [PATCH] add the config of RTTHREAD
|
||||||
|
|
||||||
|
add the init link file
|
||||||
---
|
---
|
||||||
.../esp_system/ld/esp32c3/sections.ld.in | 19 ++
|
Kconfig | 4 +
|
||||||
components/freertos/port/port_common.c | 11 +-
|
.../esp_system/ld/esp32c3/sections.ld.in | 26 +++
|
||||||
components/freertos/port/port_systick.c | 56 ++---
|
components/freertos/port/port_common.c | 5 +
|
||||||
components/riscv/vectors.S | 236 +++++++++++++++---
|
components/freertos/port/port_systick.c | 3 +
|
||||||
4 files changed, 254 insertions(+), 68 deletions(-)
|
components/riscv/vectors.S | 220 ++++++++++++++++--
|
||||||
|
5 files changed, 239 insertions(+), 19 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/Kconfig b/Kconfig
|
||||||
|
index 928d274106..d368adaa37 100644
|
||||||
|
--- a/Kconfig
|
||||||
|
+++ b/Kconfig
|
||||||
|
@@ -61,6 +61,10 @@ mainmenu "Espressif IoT Development Framework Configuration"
|
||||||
|
bool
|
||||||
|
default "y" if IDF_TARGET="linux"
|
||||||
|
|
||||||
|
+ config IDF_RTOS_RTTHREAD
|
||||||
|
+ bool "RT-THREAD SELECT"
|
||||||
|
+ default "n"
|
||||||
|
+
|
||||||
|
config IDF_FIRMWARE_CHIP_ID
|
||||||
|
hex
|
||||||
|
default 0x0000 if IDF_TARGET_ESP32
|
||||||
diff --git a/components/esp_system/ld/esp32c3/sections.ld.in b/components/esp_system/ld/esp32c3/sections.ld.in
|
diff --git a/components/esp_system/ld/esp32c3/sections.ld.in b/components/esp_system/ld/esp32c3/sections.ld.in
|
||||||
index 0ebeda06c1..10506d38a3 100644
|
index 0ebeda06c1..8215237fff 100644
|
||||||
--- a/components/esp_system/ld/esp32c3/sections.ld.in
|
--- a/components/esp_system/ld/esp32c3/sections.ld.in
|
||||||
+++ b/components/esp_system/ld/esp32c3/sections.ld.in
|
+++ b/components/esp_system/ld/esp32c3/sections.ld.in
|
||||||
@@ -183,6 +183,25 @@ SECTIONS
|
@@ -183,6 +183,32 @@ SECTIONS
|
||||||
_noinit_end = ABSOLUTE(.);
|
_noinit_end = ABSOLUTE(.);
|
||||||
} > dram0_0_seg
|
} > dram0_0_seg
|
||||||
|
|
||||||
|
@ -36,101 +53,61 @@ index 0ebeda06c1..10506d38a3 100644
|
||||||
+ __heap_start__ = .;
|
+ __heap_start__ = .;
|
||||||
+ . += __STACKSIZE__;
|
+ . += __STACKSIZE__;
|
||||||
+ __heap_end__ = .;
|
+ __heap_end__ = .;
|
||||||
|
+ /* section information for initial. */
|
||||||
|
+ . = ALIGN(4);
|
||||||
|
+ __rt_init_start = .;
|
||||||
|
+ KEEP(*(SORT(.rti_fn*)))
|
||||||
|
+ __rt_init_end = .;
|
||||||
|
+
|
||||||
|
+ . = ALIGN(4);
|
||||||
+ } > dram0_0_seg
|
+ } > dram0_0_seg
|
||||||
/* Shared RAM */
|
/* Shared RAM */
|
||||||
.dram0.bss (NOLOAD) :
|
.dram0.bss (NOLOAD) :
|
||||||
{
|
{
|
||||||
diff --git a/components/freertos/port/port_common.c b/components/freertos/port/port_common.c
|
diff --git a/components/freertos/port/port_common.c b/components/freertos/port/port_common.c
|
||||||
index ffca3d5429..dd3cc46f16 100644
|
index ffca3d5429..9d8159f588 100644
|
||||||
--- a/components/freertos/port/port_common.c
|
--- a/components/freertos/port/port_common.c
|
||||||
+++ b/components/freertos/port/port_common.c
|
+++ b/components/freertos/port/port_common.c
|
||||||
@@ -74,11 +74,12 @@ void esp_startup_start_app_common(void)
|
@@ -74,11 +74,16 @@ void esp_startup_start_app_common(void)
|
||||||
esp_gdbstub_init();
|
esp_gdbstub_init();
|
||||||
#endif // CONFIG_ESP_SYSTEM_GDBSTUB_RUNTIME
|
#endif // CONFIG_ESP_SYSTEM_GDBSTUB_RUNTIME
|
||||||
|
|
||||||
- portBASE_TYPE res = xTaskCreatePinnedToCore(&main_task, "main",
|
+#ifdef CONFIG_IDF_RTOS_RTTHREAD
|
||||||
- ESP_TASK_MAIN_STACK, NULL,
|
|
||||||
- ESP_TASK_MAIN_PRIO, NULL, ESP_TASK_MAIN_CORE);
|
|
||||||
- assert(res == pdTRUE);
|
|
||||||
- (void)res;
|
|
||||||
+ // portBASE_TYPE res = xTaskCreatePinnedToCore(&main_task, "main",
|
|
||||||
+ // ESP_TASK_MAIN_STACK, NULL,
|
|
||||||
+ // ESP_TASK_MAIN_PRIO, NULL, ESP_TASK_MAIN_CORE);
|
|
||||||
+ ///assert(res == pdTRUE);
|
|
||||||
+ app_main();
|
+ app_main();
|
||||||
+ //(void)res;
|
+#else
|
||||||
|
portBASE_TYPE res = xTaskCreatePinnedToCore(&main_task, "main",
|
||||||
|
ESP_TASK_MAIN_STACK, NULL,
|
||||||
|
ESP_TASK_MAIN_PRIO, NULL, ESP_TASK_MAIN_CORE);
|
||||||
|
assert(res == pdTRUE);
|
||||||
|
(void)res;
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
}
|
}
|
||||||
|
|
||||||
static void main_task(void* args)
|
static void main_task(void* args)
|
||||||
diff --git a/components/freertos/port/port_systick.c b/components/freertos/port/port_systick.c
|
diff --git a/components/freertos/port/port_systick.c b/components/freertos/port/port_systick.c
|
||||||
index 0c14a155a1..cf525f9383 100644
|
index 0c14a155a1..0fa203574b 100644
|
||||||
--- a/components/freertos/port/port_systick.c
|
--- a/components/freertos/port/port_systick.c
|
||||||
+++ b/components/freertos/port/port_systick.c
|
+++ b/components/freertos/port/port_systick.c
|
||||||
@@ -116,34 +116,34 @@ void vPortSetupTimer(void)
|
@@ -116,6 +116,8 @@ void vPortSetupTimer(void)
|
||||||
*/
|
*/
|
||||||
IRAM_ATTR void SysTickIsrHandler(void *arg)
|
IRAM_ATTR void SysTickIsrHandler(void *arg)
|
||||||
{
|
{
|
||||||
- uint32_t cpuid = xPortGetCoreID();
|
+#ifdef CONFIG_IDF_RTOS_RTTHREAD
|
||||||
- systimer_hal_context_t *systimer_hal = (systimer_hal_context_t *)arg;
|
+#else
|
||||||
-#ifdef CONFIG_PM_TRACE
|
uint32_t cpuid = xPortGetCoreID();
|
||||||
- ESP_PM_TRACE_ENTER(TICK, cpuid);
|
systimer_hal_context_t *systimer_hal = (systimer_hal_context_t *)arg;
|
||||||
-#endif
|
#ifdef CONFIG_PM_TRACE
|
||||||
-
|
@@ -144,6 +146,7 @@ IRAM_ATTR void SysTickIsrHandler(void *arg)
|
||||||
- uint32_t alarm_id = SYSTIMER_LL_ALARM_OS_TICK_CORE0 + cpuid;
|
#ifdef CONFIG_PM_TRACE
|
||||||
- do {
|
ESP_PM_TRACE_EXIT(TICK, cpuid);
|
||||||
- systimer_ll_clear_alarm_int(systimer_hal->dev, alarm_id);
|
#endif
|
||||||
-
|
+#endif
|
||||||
- uint32_t diff = systimer_hal_get_counter_value(systimer_hal, SYSTIMER_LL_COUNTER_OS_TICK) / systimer_ll_get_alarm_period(systimer_hal->dev, alarm_id) - s_handled_systicks[cpuid];
|
|
||||||
- if (diff > 0) {
|
|
||||||
- if (s_handled_systicks[cpuid] == 0) {
|
|
||||||
- s_handled_systicks[cpuid] = diff;
|
|
||||||
- diff = 1;
|
|
||||||
- } else {
|
|
||||||
- s_handled_systicks[cpuid] += diff;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- do {
|
|
||||||
- xPortSysTickHandler();
|
|
||||||
- } while (--diff);
|
|
||||||
- }
|
|
||||||
- } while (systimer_ll_is_alarm_int_fired(systimer_hal->dev, alarm_id));
|
|
||||||
-
|
|
||||||
-#ifdef CONFIG_PM_TRACE
|
|
||||||
- ESP_PM_TRACE_EXIT(TICK, cpuid);
|
|
||||||
-#endif
|
|
||||||
+// uint32_t cpuid = xPortGetCoreID();
|
|
||||||
+// systimer_hal_context_t *systimer_hal = (systimer_hal_context_t *)arg;
|
|
||||||
+// #ifdef CONFIG_PM_TRACE
|
|
||||||
+// ESP_PM_TRACE_ENTER(TICK, cpuid);
|
|
||||||
+// #endif
|
|
||||||
+
|
|
||||||
+// uint32_t alarm_id = SYSTIMER_LL_ALARM_OS_TICK_CORE0 + cpuid;
|
|
||||||
+// do {
|
|
||||||
+// systimer_ll_clear_alarm_int(systimer_hal->dev, alarm_id);
|
|
||||||
+
|
|
||||||
+// uint32_t diff = systimer_hal_get_counter_value(systimer_hal, SYSTIMER_LL_COUNTER_OS_TICK) / systimer_ll_get_alarm_period(systimer_hal->dev, alarm_id) - s_handled_systicks[cpuid];
|
|
||||||
+// if (diff > 0) {
|
|
||||||
+// if (s_handled_systicks[cpuid] == 0) {
|
|
||||||
+// s_handled_systicks[cpuid] = diff;
|
|
||||||
+// diff = 1;
|
|
||||||
+// } else {
|
|
||||||
+// s_handled_systicks[cpuid] += diff;
|
|
||||||
+// }
|
|
||||||
+
|
|
||||||
+// do {
|
|
||||||
+// xPortSysTickHandler();
|
|
||||||
+// } while (--diff);
|
|
||||||
+// }
|
|
||||||
+// } while (systimer_ll_is_alarm_int_fired(systimer_hal->dev, alarm_id));
|
|
||||||
+
|
|
||||||
+// #ifdef CONFIG_PM_TRACE
|
|
||||||
+// ESP_PM_TRACE_EXIT(TICK, cpuid);
|
|
||||||
+// #endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // CONFIG_FREERTOS_SYSTICK_USES_CCOUNT
|
#endif // CONFIG_FREERTOS_SYSTICK_USES_CCOUNT
|
||||||
diff --git a/components/riscv/vectors.S b/components/riscv/vectors.S
|
diff --git a/components/riscv/vectors.S b/components/riscv/vectors.S
|
||||||
index 1006d5bea5..91bb4aa39e 100644
|
index 1006d5bea5..963494fcb3 100644
|
||||||
--- a/components/riscv/vectors.S
|
--- a/components/riscv/vectors.S
|
||||||
+++ b/components/riscv/vectors.S
|
+++ b/components/riscv/vectors.S
|
||||||
@@ -17,6 +17,9 @@
|
@@ -17,6 +17,9 @@
|
||||||
|
@ -143,12 +120,13 @@ index 1006d5bea5..91bb4aa39e 100644
|
||||||
|
|
||||||
.equ SAVE_REGS, 32
|
.equ SAVE_REGS, 32
|
||||||
.equ CONTEXT_SIZE, (SAVE_REGS * 4)
|
.equ CONTEXT_SIZE, (SAVE_REGS * 4)
|
||||||
@@ -218,25 +221,25 @@ _call_panic_handler:
|
@@ -218,25 +221,27 @@ _call_panic_handler:
|
||||||
*/
|
*/
|
||||||
.global _interrupt_handler
|
.global _interrupt_handler
|
||||||
.type _interrupt_handler, @function
|
.type _interrupt_handler, @function
|
||||||
-_interrupt_handler:
|
+#ifndef CONFIG_IDF_RTOS_RTTHREAD
|
||||||
+_interrupt_handler1:
|
+
|
||||||
|
_interrupt_handler:
|
||||||
/* entry */
|
/* entry */
|
||||||
- save_regs
|
- save_regs
|
||||||
- save_mepc
|
- save_mepc
|
||||||
|
@ -179,31 +157,18 @@ index 1006d5bea5..91bb4aa39e 100644
|
||||||
li t2, 0x7fffffff
|
li t2, 0x7fffffff
|
||||||
and t1, s1, t2 /* t1 = mcause & mask */
|
and t1, s1, t2 /* t1 = mcause & mask */
|
||||||
slli t1, t1, 2 /* t1 = mcause * 4 */
|
slli t1, t1, 2 /* t1 = mcause * 4 */
|
||||||
@@ -247,56 +250,219 @@ _interrupt_handler:
|
@@ -247,8 +252,8 @@ _interrupt_handler:
|
||||||
sw t2, 0(t0) /* INTERRUPT_CORE0_CPU_INT_THRESH_REG = t2 */
|
sw t2, 0(t0) /* INTERRUPT_CORE0_CPU_INT_THRESH_REG = t2 */
|
||||||
fence
|
fence
|
||||||
|
|
||||||
- li t0, 0x8
|
- li t0, 0x8
|
||||||
- csrrs t0, mstatus, t0
|
- csrrs t0, mstatus, t0
|
||||||
-
|
|
||||||
- #ifdef CONFIG_PM_TRACE
|
|
||||||
- li a0, 0 /* = ESP_PM_TRACE_IDLE */
|
|
||||||
- #if SOC_CPU_CORES_NUM == 1
|
|
||||||
- li a1, 0 /* No need to check core ID on single core hardware */
|
|
||||||
- #else
|
|
||||||
- csrr a1, mhartid
|
|
||||||
- #endif
|
|
||||||
- la t0, esp_pm_trace_exit
|
|
||||||
- jalr t0 /* absolute jump, avoid the 1 MiB range constraint */
|
|
||||||
- #endif
|
|
||||||
+ li t0, 0x8 /* t0 = 8 */
|
+ li t0, 0x8 /* t0 = 8 */
|
||||||
+ csrrs t0, mstatus, t0 /*设置状态MIE寄存器,开总中断*/
|
+ csrrs t0, mstatus, t0 /*设置状态MIE寄存器,开总中断*/
|
||||||
|
|
||||||
- #ifdef CONFIG_PM_ENABLE
|
#ifdef CONFIG_PM_TRACE
|
||||||
- la t0, esp_pm_impl_isr_hook
|
li a0, 0 /* = ESP_PM_TRACE_IDLE */
|
||||||
- jalr t0 /* absolute jump, avoid the 1 MiB range constraint */
|
@@ -269,34 +274,211 @@ _interrupt_handler:
|
||||||
- #endif
|
|
||||||
|
|
||||||
/* call the C dispatcher */
|
/* call the C dispatcher */
|
||||||
mv a0, sp /* argument 1, stack pointer */
|
mv a0, sp /* argument 1, stack pointer */
|
||||||
mv a1, s1 /* argument 2, interrupt number (mcause) */
|
mv a1, s1 /* argument 2, interrupt number (mcause) */
|
||||||
|
@ -248,10 +213,8 @@ index 1006d5bea5..91bb4aa39e 100644
|
||||||
|
|
||||||
/* exit, this will also re-enable the interrupts */
|
/* exit, this will also re-enable the interrupts */
|
||||||
mret
|
mret
|
||||||
+ .size _interrupt_handler1, .-_interrupt_handler1
|
.size _interrupt_handler, .-_interrupt_handler
|
||||||
+
|
+#else
|
||||||
+
|
|
||||||
+
|
|
||||||
+_interrupt_handler:
|
+_interrupt_handler:
|
||||||
+ /* 此时CPU的sp = from_thread->sp */
|
+ /* 此时CPU的sp = from_thread->sp */
|
||||||
+ /* 注意: 在这里,并没有将mepc的值赋值为from_thread栈中的epc,但后面会赋值 */
|
+ /* 注意: 在这里,并没有将mepc的值赋值为from_thread栈中的epc,但后面会赋值 */
|
||||||
|
@ -423,7 +386,8 @@ index 1006d5bea5..91bb4aa39e 100644
|
||||||
+
|
+
|
||||||
+ addi sp, sp, 32 * REGBYTES
|
+ addi sp, sp, 32 * REGBYTES
|
||||||
+ mret
|
+ mret
|
||||||
.size _interrupt_handler, .-_interrupt_handler
|
+ .size _interrupt_handler, .-_interrupt_handler
|
||||||
|
+#endif
|
||||||
--
|
--
|
||||||
2.35.1.windows.2
|
2.35.1.windows.2
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
## 开发板介绍
|
## 开发板介绍
|
||||||
|
|
||||||
目前测试了两款开发板,运行都正常,由于两款开发板LED小灯引脚不同,请根据自己开发板修改GPIO引脚,目前默认使用的开发板是LUATOS_ESP32C3。已测开发板外观如下图所示:
|
目前测试了两款开发板,运行都正常,由于两款开发板LED小灯引脚不同,请根据自己开发板修改GPIO引脚,目前默认使用的开发板是LUATOS_ESP32C3 `GPIO 12` (HX 开发板引脚是`GPIO 8`)。已测开发板外观如下图所示:
|
||||||
|
|
||||||
- [LUATOS_ESP32C3](https://wiki.luatos.com/chips/esp32c3/board.html)
|
- [LUATOS_ESP32C3](https://wiki.luatos.com/chips/esp32c3/board.html)
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@
|
||||||
- MCU:[esp32-c3](https://www.espressif.com/sites/default/files/documentation/esp32-c3_datasheet_en.pdf),主频 160MHz, 407.22 CoreMark; 2.55 CoreMark/MHz
|
- MCU:[esp32-c3](https://www.espressif.com/sites/default/files/documentation/esp32-c3_datasheet_en.pdf),主频 160MHz, 407.22 CoreMark; 2.55 CoreMark/MHz
|
||||||
- 芯片内置:384KB ROM, 400KB SRAM,
|
- 芯片内置:384KB ROM, 400KB SRAM,
|
||||||
- 常用外设
|
- 常用外设
|
||||||
- 红色LED:2个,D4 (IO12), D5(IO13)
|
- 红色LED:2个,LED: D4 (IO12), D5(IO13)
|
||||||
- 按键:2个,K1(BOOT) K2(RST)
|
- 按键:2个,K1(BOOT) K2(RST)
|
||||||
- SPI FLASH: 2M
|
- SPI FLASH: 2M
|
||||||
- 常用接口:USB UART等
|
- 常用接口:USB UART等
|
||||||
|
@ -44,8 +44,8 @@
|
||||||
|
|
||||||
| **片上外设** | **支持情况** | **备注** |
|
| **片上外设** | **支持情况** | **备注** |
|
||||||
| :----------------- | :----------: | :------------------------------------- |
|
| :----------------- | :----------: | :------------------------------------- |
|
||||||
| GPIO | 待支持 | |
|
| GPIO | 支持 | |
|
||||||
| UART | 待支持 | |
|
| UART | 支持中 | |
|
||||||
|
|
||||||
## 使用说明
|
## 使用说明
|
||||||
|
|
||||||
|
@ -57,10 +57,20 @@ IDF的搭建方法有很多种,尝试了很多种方法之后,总结了一
|
||||||
|
|
||||||
### IDF patch加载
|
### IDF patch加载
|
||||||
|
|
||||||
由于IDF使用的是FREERTOS需要修改一些文件,将`0001-add-fixed-of-rtthread.patch` 这个文件拷贝到安装的时候的IDF的代码目录,执行命令 `git apply 0001-add-fixed-of-rtthread.patch` 打上patch
|
由于IDF使用的是FREERTOS需要修改一些文件,将`0001-add-the-config-of-RTTHREAD.patch` 这个文件拷贝到安装的时候的IDF的代码目录,执行命令 下面的命令可以打上patch
|
||||||
|
|
||||||
|
```
|
||||||
|
cd esp/esp-idf
|
||||||
|
git checkout v4.4
|
||||||
|
git am 0001-add-the-config-of-RTTHREAD.patch
|
||||||
|
```
|
||||||
|
|
||||||
|
如果不想用patch文件,我已经将代码上传到github上面,可以进入[supperthomas/esp-idf](https://github.com/supperthomas/esp-idf) 下载最新的master分支。修改之后的IDF,原来的IDF的example还是正常使用,互不干扰。
|
||||||
|
|
||||||
#### 编译下载
|
#### 编译下载
|
||||||
|
|
||||||
|
用VSCODE 在bsp/ESP32_C3中右击打开
|
||||||
|
|
||||||
编译选择最下面的按钮:
|
编译选择最下面的按钮:
|
||||||
|
|
||||||
![build](images/build.png)
|
![build](images/build.png)
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
idf_component_register(SRCS "main.c"
|
idf_component_register(SRCS "board.c" "main.c"
|
||||||
|
"drv_gpio.c"
|
||||||
"../../../libcpu/risc-v/common/cpuport.c"
|
"../../../libcpu/risc-v/common/cpuport.c"
|
||||||
"../../../libcpu/risc-v/common/context_gcc.S"
|
"../../../libcpu/risc-v/common/context_gcc.S"
|
||||||
"../../../src/components.c"
|
"../../../src/components.c"
|
||||||
|
@ -14,10 +15,30 @@ idf_component_register(SRCS "main.c"
|
||||||
"../../../src/idle.c"
|
"../../../src/idle.c"
|
||||||
"../../../src/timer.c"
|
"../../../src/timer.c"
|
||||||
"../../../src/kservice.c"
|
"../../../src/kservice.c"
|
||||||
|
"../../../src/device.c"
|
||||||
|
"../../../components/drivers/misc/pin.c"
|
||||||
|
"../../../components/drivers/ipc/pipe.c"
|
||||||
|
"../../../components/drivers/ipc/ringblk_buf.c"
|
||||||
|
"../../../components/drivers/ipc/waitqueue.c"
|
||||||
|
"../../../components/drivers/ipc/completion.c"
|
||||||
|
"../../../components/drivers/ipc/dataqueue.c"
|
||||||
|
"../../../components/drivers/ipc/ringbuffer.c"
|
||||||
|
"../../../components/drivers/ipc/workqueue.c"
|
||||||
|
|
||||||
|
|
||||||
|
"../../../components/drivers/serial/serial.c"
|
||||||
|
|
||||||
INCLUDE_DIRS
|
INCLUDE_DIRS
|
||||||
|
"../../../components/drivers/include/drivers"
|
||||||
|
|
||||||
|
"../../../components/drivers/include"
|
||||||
|
"."
|
||||||
"../../../include"
|
"../../../include"
|
||||||
"../../../libcpu/risc-v/common"
|
"../../../libcpu/risc-v/common"
|
||||||
"../")
|
"../")
|
||||||
ADD_DEFINITIONS(
|
ADD_DEFINITIONS(
|
||||||
-D__RTTHREAD__
|
-D__RTTHREAD__
|
||||||
)
|
)
|
||||||
|
#TODO
|
||||||
|
#list(APPEND LINK_FLAGS "-u __rt_init_desc_rt_hw_pin_init")
|
||||||
|
#set(compile_options "-u __rt_init_desc_rt_hw_pin_init")
|
|
@ -0,0 +1,241 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021-2022, RT-Thread Development Team
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
* Change Logs:
|
||||||
|
* Date Author Notes
|
||||||
|
* 2022-06-02 supperthomas first version
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "esp_private/panic_internal.h"
|
||||||
|
#include "hal/uart_hal.h"
|
||||||
|
#include "driver/timer.h"
|
||||||
|
#include "soc/periph_defs.h"
|
||||||
|
#include "hal/systimer_hal.h"
|
||||||
|
#include "hal/systimer_ll.h"
|
||||||
|
#include "esp_intr_alloc.h"
|
||||||
|
|
||||||
|
#include "rtthread.h"
|
||||||
|
#include "rthw.h"
|
||||||
|
#include "drv_gpio.h"
|
||||||
|
|
||||||
|
#define rt_kprintf printf
|
||||||
|
|
||||||
|
#ifdef RT_USING_COMPONENTS_INIT
|
||||||
|
/*
|
||||||
|
* Components Initialization will initialize some driver and components as following
|
||||||
|
* order:
|
||||||
|
* rti_start --> 0
|
||||||
|
* BOARD_EXPORT --> 1
|
||||||
|
* rti_board_end --> 1.end
|
||||||
|
*
|
||||||
|
* DEVICE_EXPORT --> 2
|
||||||
|
* COMPONENT_EXPORT --> 3
|
||||||
|
* FS_EXPORT --> 4
|
||||||
|
* ENV_EXPORT --> 5
|
||||||
|
* APP_EXPORT --> 6
|
||||||
|
*
|
||||||
|
* rti_end --> 6.end
|
||||||
|
*
|
||||||
|
* These automatically initialization, the driver or component initial function must
|
||||||
|
* be defined with:
|
||||||
|
* INIT_BOARD_EXPORT(fn);
|
||||||
|
* INIT_DEVICE_EXPORT(fn);
|
||||||
|
* ...
|
||||||
|
* INIT_APP_EXPORT(fn);
|
||||||
|
* etc.
|
||||||
|
*/
|
||||||
|
static int rti_start(void)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
INIT_EXPORT(rti_start, "0");
|
||||||
|
|
||||||
|
static int rti_board_start(void)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
INIT_EXPORT(rti_board_start, "0.end");
|
||||||
|
|
||||||
|
static int rti_board_end(void)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
INIT_EXPORT(rti_board_end, "1.end");
|
||||||
|
|
||||||
|
static int rti_end(void)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
INIT_EXPORT(rti_end, "6.end");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Onboard components initialization. In this function, the board-level
|
||||||
|
* initialization function will be called to complete the initialization
|
||||||
|
* of the on-board peripherals.
|
||||||
|
*/
|
||||||
|
void rt_components_board_init(void)
|
||||||
|
{
|
||||||
|
#if RT_DEBUG_INIT
|
||||||
|
int result;
|
||||||
|
const struct rt_init_desc *desc;
|
||||||
|
for (desc = &__rt_init_desc_rti_board_start; desc < &__rt_init_desc_rti_board_end; desc ++)
|
||||||
|
{
|
||||||
|
rt_kprintf("rt_components_board_init initialize %s", desc->fn_name);
|
||||||
|
result = desc->fn();
|
||||||
|
rt_kprintf(":%d done\n", result);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
volatile const init_fn_t *fn_ptr;
|
||||||
|
|
||||||
|
for (fn_ptr = &__rt_init_rti_board_start; fn_ptr < &__rt_init_rti_board_end; fn_ptr++)
|
||||||
|
{
|
||||||
|
(*fn_ptr)();
|
||||||
|
}
|
||||||
|
#endif /* RT_DEBUG_INIT */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief RT-Thread Components Initialization.
|
||||||
|
*/
|
||||||
|
void rt_components_init(void)
|
||||||
|
{
|
||||||
|
#if RT_DEBUG_INIT
|
||||||
|
int result;
|
||||||
|
const struct rt_init_desc *desc;
|
||||||
|
|
||||||
|
rt_kprintf("do components initialization.\n");
|
||||||
|
for (desc = &__rt_init_desc_rti_board_end; desc < &__rt_init_desc_rti_end; desc ++)
|
||||||
|
{
|
||||||
|
rt_kprintf("rt_components_init initialize %s", desc->fn_name);
|
||||||
|
result = desc->fn();
|
||||||
|
rt_kprintf(":%d done\n", result);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
volatile const init_fn_t *fn_ptr;
|
||||||
|
|
||||||
|
for (fn_ptr = &__rt_init_rti_board_end; fn_ptr < &__rt_init_rti_end; fn_ptr ++)
|
||||||
|
{
|
||||||
|
(*fn_ptr)();
|
||||||
|
}
|
||||||
|
#endif /* RT_DEBUG_INIT */
|
||||||
|
}
|
||||||
|
#endif /* RT_USING_COMPONENTS_INIT */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void main_thread_entry(void *parameter)
|
||||||
|
{
|
||||||
|
#ifdef RT_USING_COMPONENTS_INIT
|
||||||
|
/* RT-Thread components initialization */
|
||||||
|
rt_components_init();
|
||||||
|
#endif /* RT_USING_COMPONENTS_INIT */
|
||||||
|
|
||||||
|
extern int rtt_main();
|
||||||
|
rtt_main();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void rt_application_init(void)
|
||||||
|
{
|
||||||
|
rt_thread_t tid;
|
||||||
|
|
||||||
|
#define RT_MAIN_THREAD_STACK_SIZE 2048
|
||||||
|
#define RT_MAIN_THREAD_PRIORITY 10
|
||||||
|
|
||||||
|
tid = rt_thread_create("main", main_thread_entry, RT_NULL,
|
||||||
|
RT_MAIN_THREAD_STACK_SIZE, RT_MAIN_THREAD_PRIORITY, 20);
|
||||||
|
RT_ASSERT(tid != RT_NULL);
|
||||||
|
|
||||||
|
rt_thread_startup(tid);
|
||||||
|
}
|
||||||
|
|
||||||
|
//component
|
||||||
|
static uint32_t uwTick = 0;
|
||||||
|
static systimer_hal_context_t systimer_hal;
|
||||||
|
IRAM_ATTR void rt_SysTickIsrHandler(void *arg)
|
||||||
|
{
|
||||||
|
systimer_ll_clear_alarm_int(systimer_hal.dev, 1);
|
||||||
|
rt_interrupt_enter();
|
||||||
|
|
||||||
|
rt_tick_increase();
|
||||||
|
uwTick++;
|
||||||
|
/* leave interrupt */
|
||||||
|
rt_interrupt_leave();
|
||||||
|
systimer_ll_is_alarm_int_fired(systimer_hal.dev, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void rt_hw_systick_init(void)
|
||||||
|
{
|
||||||
|
uint8_t system_timer_counter=1;
|
||||||
|
|
||||||
|
//rt_hw_interrupt_enable(0);
|
||||||
|
esp_intr_alloc(ETS_SYSTIMER_TARGET1_EDGE_INTR_SOURCE, ESP_INTR_FLAG_IRAM | ESP_INTR_FLAG_LEVEL1, rt_SysTickIsrHandler, &systimer_hal, NULL);
|
||||||
|
systimer_hal_init(&systimer_hal);
|
||||||
|
systimer_ll_set_counter_value(systimer_hal.dev, system_timer_counter, 0);
|
||||||
|
systimer_ll_apply_counter_value(systimer_hal.dev, system_timer_counter);
|
||||||
|
uint32_t alarm_id = 1 ;
|
||||||
|
systimer_hal_connect_alarm_counter(&systimer_hal, alarm_id, system_timer_counter);
|
||||||
|
systimer_hal_set_alarm_period(&systimer_hal, alarm_id, 1000000UL / 1000);
|
||||||
|
systimer_hal_select_alarm_mode(&systimer_hal, alarm_id, SYSTIMER_ALARM_MODE_PERIOD);
|
||||||
|
systimer_hal_counter_can_stall_by_cpu(&systimer_hal, 1, 0, true);
|
||||||
|
systimer_hal_enable_alarm_int(&systimer_hal, alarm_id);
|
||||||
|
|
||||||
|
systimer_hal_enable_counter(&systimer_hal, SYSTIMER_LL_COUNTER_OS_TICK);
|
||||||
|
}
|
||||||
|
void rt_hw_board_init(void)
|
||||||
|
{
|
||||||
|
rt_hw_systick_init();
|
||||||
|
#if defined(RT_USING_HEAP)
|
||||||
|
extern int __heap_start__;
|
||||||
|
extern int __heap_end__;
|
||||||
|
printf("%s:%d__heap_start__:%p,__heap_end__:%p\n",__func__,__LINE__,&__heap_start__,&__heap_end__);
|
||||||
|
rt_system_heap_init((void *)&__heap_start__, (void *)&__heap_end__);
|
||||||
|
#endif
|
||||||
|
/* Board underlying hardware initialization */
|
||||||
|
#ifdef RT_USING_COMPONENTS_INIT
|
||||||
|
rt_components_board_init();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static void rtthread_startup(void)
|
||||||
|
{
|
||||||
|
rt_hw_interrupt_disable();
|
||||||
|
/* init board */
|
||||||
|
rt_hw_board_init();
|
||||||
|
/* show RT-Thread version */
|
||||||
|
rt_show_version();
|
||||||
|
|
||||||
|
/* timer system initialization */
|
||||||
|
rt_system_timer_init();
|
||||||
|
|
||||||
|
/* scheduler system initialization */
|
||||||
|
rt_system_scheduler_init();
|
||||||
|
|
||||||
|
/* create init_thread */
|
||||||
|
rt_application_init();
|
||||||
|
|
||||||
|
/* timer thread initialization */
|
||||||
|
rt_system_timer_thread_init();
|
||||||
|
|
||||||
|
/* idle thread initialization */
|
||||||
|
rt_thread_idle_init();
|
||||||
|
|
||||||
|
/* start scheduler */
|
||||||
|
rt_system_scheduler_start();
|
||||||
|
/* init scheduler system */
|
||||||
|
rt_hw_pin_init();
|
||||||
|
/* never reach here */
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
|
||||||
|
void app_main(void)
|
||||||
|
{
|
||||||
|
/* startup RT-Thread RTOS */
|
||||||
|
rtthread_startup();
|
||||||
|
return;
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021-2022, RT-Thread Development Team
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
* Change Logs:
|
||||||
|
* Date Author Notes
|
||||||
|
* 2022-06-02 supperthomas first version
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __BOARD_H__
|
||||||
|
#define __BOARD_H__
|
||||||
|
|
||||||
|
#include <rtthread.h>
|
||||||
|
#include "drv_gpio.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -0,0 +1,101 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021-2022, RT-Thread Development Team
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
* Change Logs:
|
||||||
|
* Date Author Notes
|
||||||
|
* 2022-06-03 supperthomas first version
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "drv_gpio.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#ifdef RT_USING_PIN
|
||||||
|
|
||||||
|
#define DBG_LEVEL DBG_LOG
|
||||||
|
#define LOG_TAG "drv.gpio"
|
||||||
|
#include <rtdbg.h>
|
||||||
|
|
||||||
|
|
||||||
|
static void mcu_pin_write(rt_device_t dev, rt_base_t pin, rt_base_t value)
|
||||||
|
{
|
||||||
|
gpio_set_level(pin, value);
|
||||||
|
/*TODO:set gpio out put mode */
|
||||||
|
}
|
||||||
|
|
||||||
|
static int mcu_pin_read(rt_device_t dev, rt_base_t pin)
|
||||||
|
{
|
||||||
|
int value;
|
||||||
|
value = gpio_get_level(pin);
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
static gpio_config_t init_io(gpio_num_t num)
|
||||||
|
{
|
||||||
|
gpio_config_t io_conf;
|
||||||
|
io_conf.intr_type = GPIO_INTR_DISABLE;
|
||||||
|
io_conf.mode = GPIO_MODE_OUTPUT;
|
||||||
|
io_conf.pin_bit_mask = (1ULL << num);
|
||||||
|
io_conf.pull_down_en = 0;
|
||||||
|
io_conf.pull_up_en = 0;
|
||||||
|
return io_conf;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void mcu_pin_mode(rt_device_t dev, rt_base_t pin, rt_base_t mode)
|
||||||
|
{
|
||||||
|
gpio_config_t io_conf;
|
||||||
|
io_conf.intr_type = GPIO_INTR_DISABLE;
|
||||||
|
io_conf.mode = GPIO_MODE_OUTPUT;
|
||||||
|
io_conf.pin_bit_mask = (1ULL << pin);
|
||||||
|
io_conf.pull_down_en = 0;
|
||||||
|
io_conf.pull_up_en = 0;
|
||||||
|
gpio_config(&io_conf);
|
||||||
|
if (mode == PIN_MODE_OUTPUT)
|
||||||
|
{
|
||||||
|
gpio_set_direction(pin, GPIO_MODE_OUTPUT);
|
||||||
|
}
|
||||||
|
/*TODO:set gpio out put mode */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static rt_err_t mcu_pin_attach_irq(struct rt_device *device, rt_int32_t pin,
|
||||||
|
rt_uint32_t irq_mode, void (*hdr)(void *args), void *args)
|
||||||
|
{
|
||||||
|
|
||||||
|
/*TODO: start irq handle */
|
||||||
|
return RT_EOK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static rt_err_t mcu_pin_dettach_irq(struct rt_device *device, rt_int32_t pin)
|
||||||
|
{
|
||||||
|
/*TODO:disable gpio irq handle */
|
||||||
|
return RT_EOK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static rt_err_t mcu_pin_irq_enable(struct rt_device *device, rt_base_t pin,
|
||||||
|
rt_uint32_t enabled)
|
||||||
|
{
|
||||||
|
/*TODO:start irq handle */
|
||||||
|
return RT_EOK;
|
||||||
|
}
|
||||||
|
|
||||||
|
const static struct rt_pin_ops _mcu_pin_ops =
|
||||||
|
{
|
||||||
|
mcu_pin_mode,
|
||||||
|
mcu_pin_write,
|
||||||
|
mcu_pin_read,
|
||||||
|
mcu_pin_attach_irq,
|
||||||
|
mcu_pin_dettach_irq,
|
||||||
|
mcu_pin_irq_enable,
|
||||||
|
///NULL,
|
||||||
|
};
|
||||||
|
|
||||||
|
int rt_hw_pin_init(void)
|
||||||
|
{
|
||||||
|
/*TODO: INIT THE GPIO CLOCK AND OTHER */
|
||||||
|
return rt_device_pin_register("pin", &_mcu_pin_ops, RT_NULL);
|
||||||
|
}
|
||||||
|
INIT_BOARD_EXPORT(rt_hw_pin_init);
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* RT_USING_PIN */
|
|
@ -0,0 +1,27 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021-2022, RT-Thread Development Team
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
* Change Logs:
|
||||||
|
* Date Author Notes
|
||||||
|
* 2022-06-03 supperthomas first version
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __DRV_GPIO_H__
|
||||||
|
#define __DRV_GPIO_H__
|
||||||
|
|
||||||
|
#include <rtthread.h>
|
||||||
|
#include <rthw.h>
|
||||||
|
|
||||||
|
#ifdef RT_USING_DEVICE
|
||||||
|
#include <rtdevice.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "driver/gpio.h"
|
||||||
|
|
||||||
|
|
||||||
|
int rt_hw_pin_init(void);
|
||||||
|
|
||||||
|
#endif /* __DRV_GPIO_H__ */
|
|
@ -1,133 +1,28 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2021-2021, RT-Thread Development Team
|
* Copyright (c) 2021-2022, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
* 2022-04-24 supperthomas first version
|
* 2022-04-24 supperthomas first version
|
||||||
|
* 2022-06-02 supperthomas fix version
|
||||||
*/
|
*/
|
||||||
#include <stdio.h>
|
|
||||||
#include "driver/gpio.h"
|
|
||||||
|
|
||||||
|
#include <rtthread.h>
|
||||||
|
#include <rtdevice.h>
|
||||||
|
#include <board.h>
|
||||||
|
|
||||||
#include "esp_private/panic_internal.h"
|
int rtt_main(void)
|
||||||
#include "hal/uart_hal.h"
|
|
||||||
#include "driver/timer.h"
|
|
||||||
#include "soc/periph_defs.h"
|
|
||||||
#include "hal/systimer_hal.h"
|
|
||||||
#include "hal/systimer_ll.h"
|
|
||||||
#include "esp_intr_alloc.h"
|
|
||||||
|
|
||||||
#include "rtthread.h"
|
|
||||||
#include "rthw.h"
|
|
||||||
|
|
||||||
|
|
||||||
void main_thread_entry(void *parameter)
|
|
||||||
{
|
{
|
||||||
#define BLINK_GPIO 12
|
#define BLINK_GPIO 12
|
||||||
gpio_reset_pin(BLINK_GPIO);
|
rt_pin_mode(BLINK_GPIO, PIN_MODE_OUTPUT);
|
||||||
gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
gpio_set_level(BLINK_GPIO, 1);
|
printf("Hello!RT-THREAD!\r\n");
|
||||||
|
rt_pin_write(BLINK_GPIO, PIN_HIGH);
|
||||||
rt_thread_mdelay(1000);
|
rt_thread_mdelay(1000);
|
||||||
gpio_set_level(BLINK_GPIO, 0);
|
rt_pin_write(BLINK_GPIO, PIN_LOW);
|
||||||
rt_thread_mdelay(1000);
|
rt_thread_mdelay(1000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void rt_application_init(void)
|
|
||||||
{
|
|
||||||
rt_thread_t tid;
|
|
||||||
|
|
||||||
#define RT_MAIN_THREAD_STACK_SIZE 2048
|
|
||||||
#define RT_MAIN_THREAD_PRIORITY 10
|
|
||||||
|
|
||||||
tid = rt_thread_create("main", main_thread_entry, RT_NULL,
|
|
||||||
RT_MAIN_THREAD_STACK_SIZE, RT_MAIN_THREAD_PRIORITY, 20);
|
|
||||||
RT_ASSERT(tid != RT_NULL);
|
|
||||||
|
|
||||||
rt_thread_startup(tid);
|
|
||||||
}
|
|
||||||
|
|
||||||
//component
|
|
||||||
static uint32_t uwTick = 0;
|
|
||||||
static systimer_hal_context_t systimer_hal;
|
|
||||||
IRAM_ATTR void rt_SysTickIsrHandler(void *arg)
|
|
||||||
{
|
|
||||||
systimer_ll_clear_alarm_int(systimer_hal.dev, 1);
|
|
||||||
rt_interrupt_enter();
|
|
||||||
|
|
||||||
rt_tick_increase();
|
|
||||||
uwTick++;
|
|
||||||
/* leave interrupt */
|
|
||||||
rt_interrupt_leave();
|
|
||||||
systimer_ll_is_alarm_int_fired(systimer_hal.dev, 1);
|
|
||||||
}
|
|
||||||
void rt_hw_systick_init(void)
|
|
||||||
{
|
|
||||||
uint8_t system_timer_counter=1;
|
|
||||||
|
|
||||||
//rt_hw_interrupt_enable(0);
|
|
||||||
esp_intr_alloc(ETS_SYSTIMER_TARGET1_EDGE_INTR_SOURCE, ESP_INTR_FLAG_IRAM | ESP_INTR_FLAG_LEVEL1, rt_SysTickIsrHandler, &systimer_hal, NULL);
|
|
||||||
systimer_hal_init(&systimer_hal);
|
|
||||||
systimer_ll_set_counter_value(systimer_hal.dev, system_timer_counter, 0);
|
|
||||||
systimer_ll_apply_counter_value(systimer_hal.dev, system_timer_counter);
|
|
||||||
uint32_t alarm_id = 1 ;
|
|
||||||
systimer_hal_connect_alarm_counter(&systimer_hal, alarm_id, system_timer_counter);
|
|
||||||
systimer_hal_set_alarm_period(&systimer_hal, alarm_id, 1000000UL / 1000);
|
|
||||||
systimer_hal_select_alarm_mode(&systimer_hal, alarm_id, SYSTIMER_ALARM_MODE_PERIOD);
|
|
||||||
systimer_hal_counter_can_stall_by_cpu(&systimer_hal, 1, 0, true);
|
|
||||||
systimer_hal_enable_alarm_int(&systimer_hal, alarm_id);
|
|
||||||
|
|
||||||
systimer_hal_enable_counter(&systimer_hal, SYSTIMER_LL_COUNTER_OS_TICK);
|
|
||||||
}
|
|
||||||
void rt_hw_board_init(void)
|
|
||||||
{
|
|
||||||
rt_hw_systick_init();
|
|
||||||
|
|
||||||
extern int __heap_start__;
|
|
||||||
extern int __heap_end__;
|
|
||||||
printf("%s:%d__heap_start__:%p,__heap_end__:%p\n",__func__,__LINE__,&__heap_start__,&__heap_end__);
|
|
||||||
rt_system_heap_init((void *)&__heap_start__, (void *)&__heap_end__);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
static void rtthread_startup(void)
|
|
||||||
{
|
|
||||||
rt_hw_interrupt_disable();
|
|
||||||
/* init board */
|
|
||||||
rt_hw_board_init();
|
|
||||||
/* show RT-Thread version */
|
|
||||||
rt_show_version();
|
|
||||||
|
|
||||||
/* timer system initialization */
|
|
||||||
rt_system_timer_init();
|
|
||||||
|
|
||||||
/* scheduler system initialization */
|
|
||||||
rt_system_scheduler_init();
|
|
||||||
|
|
||||||
/* create init_thread */
|
|
||||||
rt_application_init();
|
|
||||||
|
|
||||||
/* timer thread initialization */
|
|
||||||
rt_system_timer_thread_init();
|
|
||||||
|
|
||||||
/* idle thread initialization */
|
|
||||||
rt_thread_idle_init();
|
|
||||||
|
|
||||||
/* start scheduler */
|
|
||||||
rt_system_scheduler_start();
|
|
||||||
/* init scheduler system */
|
|
||||||
|
|
||||||
/* never reach here */
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
|
|
||||||
void app_main(void)
|
|
||||||
{
|
|
||||||
/* startup RT-Thread RTOS */
|
|
||||||
rtthread_startup();
|
|
||||||
return;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
|
@ -148,4 +148,18 @@
|
||||||
|
|
||||||
/* entertainment: terminal games and other interesting software packages */
|
/* entertainment: terminal games and other interesting software packages */
|
||||||
|
|
||||||
|
#define RT_USING_DEVICE
|
||||||
|
#define RT_USING_PIN
|
||||||
|
|
||||||
|
#define RT_USING_SEMAPHORE
|
||||||
|
#define RT_USING_MUTEX
|
||||||
|
#define RT_USING_EVENT
|
||||||
|
#define RT_USING_MAILBOX
|
||||||
|
#define RT_USING_MESSAGEQUEUE
|
||||||
|
|
||||||
|
#define RT_USING_COMPONENTS_INIT
|
||||||
|
#define RT_DEBUG_INIT 1
|
||||||
|
|
||||||
|
#define RT_USING_SERIAL
|
||||||
|
#define BSP_USING_UART1
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -6,6 +6,7 @@ CONFIG_IDF_CMAKE=y
|
||||||
CONFIG_IDF_TARGET_ARCH_RISCV=y
|
CONFIG_IDF_TARGET_ARCH_RISCV=y
|
||||||
CONFIG_IDF_TARGET="esp32c3"
|
CONFIG_IDF_TARGET="esp32c3"
|
||||||
CONFIG_IDF_TARGET_ESP32C3=y
|
CONFIG_IDF_TARGET_ESP32C3=y
|
||||||
|
CONFIG_IDF_RTOS_RTTHREAD=y
|
||||||
CONFIG_IDF_FIRMWARE_CHIP_ID=0x0005
|
CONFIG_IDF_FIRMWARE_CHIP_ID=0x0005
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
Loading…
Reference in New Issue