Skip to content

Commit 77f8368

Browse files
committed
Update.
1 parent 050ae6e commit 77f8368

File tree

4 files changed

+75
-51
lines changed

4 files changed

+75
-51
lines changed

CMakeLists.txt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ set(BIN_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.bin)
108108
# libxr
109109
set(LIBXR_SYSTEM FreeRTOS)
110110
set(LIBXR_DRIVER ch)
111+
set(LIBXR_CH32_CONFIG_FILE ch32v30x_conf.h)
111112

112113
add_subdirectory(libxr)
113114

@@ -128,12 +129,8 @@ target_include_directories(${PROJECT_NAME}.elf PRIVATE
128129
PUBLIC User
129130
)
130131

131-
target_link_libraries(xr
132-
PUBLIC
133-
)
134-
135132
target_link_libraries(${PROJECT_NAME}.elf
136-
xr
133+
PUBLIC xr
137134
)
138135

139136
# tinyusb

Core/FreeRTOSConfig.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@
6767
1 tab == 4 spaces!
6868
*/
6969

70-
7170
#ifndef FREERTOS_CONFIG_H
7271
#define FREERTOS_CONFIG_H
7372

@@ -86,6 +85,8 @@
8685
/* See https://www.freertos.org/Using-FreeRTOS-on-RISC-V.html */
8786

8887
/* don't have MTIME */
88+
89+
// clang-format off
8990
#define configMTIME_BASE_ADDRESS ( 0 )
9091
#define configMTIMECMP_BASE_ADDRESS ( 0 )
9192

@@ -96,14 +97,14 @@
9697
#define configTICK_RATE_HZ ( ( TickType_t ) 1000 )
9798
#define configMAX_PRIORITIES ( 10 )
9899
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 384 ) /* Can be as low as 60 but some of the demo tasks that use this constant require it to be higher. */
99-
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 32 * 1024 ) )
100+
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 36 * 1024 ) )
100101
#define configMAX_TASK_NAME_LEN ( 16 )
101102
#define configUSE_TRACE_FACILITY 1
102103
#define configUSE_16_BIT_TICKS 0
103104
#define configIDLE_SHOULD_YIELD 0
104105
#define configUSE_MUTEXES 1
105106
#define configQUEUE_REGISTRY_SIZE 8
106-
#define configCHECK_FOR_STACK_OVERFLOW 3
107+
#define configCHECK_FOR_STACK_OVERFLOW 1
107108
#define configUSE_RECURSIVE_MUTEXES 1
108109
#define configUSE_MALLOC_FAILED_HOOK 0
109110
#define configUSE_APPLICATION_TASK_TAG 0
@@ -146,5 +147,6 @@ to exclude the API function. */
146147
header file. */
147148
#define configASSERT( x ) if( ( x ) == 0 ) { taskDISABLE_INTERRUPTS(); while(1); }
148149

150+
// clang-format on
149151

150152
#endif /* FREERTOS_CONFIG_H */

User/app_main.cpp

Lines changed: 66 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,85 @@
11
#include <cmath>
2+
3+
#include "ch32_gpio.hpp"
4+
#include "ch32_timebase.hpp"
5+
#include "ch32_uart.hpp"
26
#include "ch32v30x_gpio.h"
37
#include "libxr.hpp"
4-
#include "ch32_timebase.hpp"
5-
#include "tusb.h"
68
#include "tinyusb_virtual_uart.hpp"
9+
#include "tusb.h"
710

811
extern "C" void app_main()
912
{
10-
GPIO_InitTypeDef GPIO_InitStructure = {0};
11-
12-
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
13-
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
14-
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
15-
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
16-
GPIO_Init(GPIOB, &GPIO_InitStructure);
13+
LibXR::CH32Timebase timebase;
1714

18-
LibXR::CH32Timebase timebase;
15+
LibXR::PlatformInit(3, 8192);
1916

20-
LibXR::PlatformInit(3, 4096);
17+
LibXR::CH32GPIO led_b(GPIOB, GPIO_Pin_4);
18+
LibXR::CH32GPIO led_r(GPIOA, GPIO_Pin_15);
19+
LibXR::CH32GPIO key(GPIOB, GPIO_Pin_3, LibXR::CH32GPIO::Direction::FALL_INTERRUPT,
20+
LibXR::CH32GPIO::Pull::UP, EXTI3_IRQn);
2121

22-
static LibXR::TinyUSBVirtualUART uart;
23-
24-
void (*blink_task)(void *) = [](void *)
25-
{
26-
static bool flag = false;
27-
if (flag)
28-
{
29-
GPIO_SetBits(GPIOB, GPIO_Pin_4);
30-
flag = false;
31-
}
32-
else
33-
{
34-
GPIO_ResetBits(GPIOB, GPIO_Pin_4);
35-
flag = true;
36-
}
37-
static LibXR::WriteOperation op;
38-
};
22+
void (*key_cb_fun)(bool, LibXR::GPIO *) = [](bool, LibXR::GPIO *led)
23+
{
24+
static bool flag = false;
25+
flag = !flag;
26+
led->Write(flag);
27+
};
3928

40-
LibXR::STDIO::read_ = uart.read_port_;
41-
LibXR::STDIO::write_ = uart.write_port_;
29+
auto key_cb =
30+
LibXR::GPIO::Callback::Create(key_cb_fun, reinterpret_cast<LibXR::GPIO *>(&led_r));
4231

43-
auto blink_task_handle = LibXR::Timer::CreateTask(blink_task, reinterpret_cast<void *>(0), 500);
44-
LibXR::Timer::Add(blink_task_handle);
45-
LibXR::Timer::Start(blink_task_handle);
32+
key.RegisterCallback(key_cb);
4633

47-
LibXR::RamFS ramfs;
34+
key.DisableInterrupt();
4835

49-
LibXR::Terminal<> terminal(ramfs);
36+
static LibXR::TinyUSBVirtualUART uart;
37+
static uint8_t uart1_tx_buffer[64], uart1_rx_buffer[64];
5038

51-
auto terminal_task_handle = LibXR::Timer::CreateTask(terminal.TaskFun, &terminal, 1);
52-
LibXR::Timer::Add(terminal_task_handle);
53-
LibXR::Timer::Start(terminal_task_handle);
39+
LibXR::CH32UART uart1(CH32_USART2, uart1_rx_buffer, uart1_tx_buffer, GPIOA, GPIO_Pin_2,
40+
GPIOA, GPIO_Pin_3, 0, 25);
5441

42+
uart1.SetConfig({
43+
.baudrate = 115200,
44+
.parity = LibXR::UART::Parity::NO_PARITY,
45+
.data_bits = 8,
46+
.stop_bits = 1,
47+
});
5548

56-
while (1)
49+
void (*blink_task)(LibXR::GPIO *) = [](LibXR::GPIO *led)
50+
{
51+
static bool flag = false;
52+
if (flag)
5753
{
58-
LibXR::Thread::Sleep(1000);
54+
flag = false;
5955
}
60-
}
56+
else
57+
{
58+
flag = true;
59+
}
60+
61+
led->Write(flag);
62+
};
63+
64+
LibXR::STDIO::read_ = uart1.read_port_;
65+
LibXR::STDIO::write_ = uart1.write_port_;
66+
67+
auto blink_task_handle =
68+
LibXR::Timer::CreateTask(blink_task, reinterpret_cast<LibXR::GPIO *>(&led_b), 500);
69+
LibXR::Timer::Add(blink_task_handle);
70+
LibXR::Timer::Start(blink_task_handle);
71+
72+
LibXR::RamFS ramfs;
73+
74+
LibXR::Terminal<> terminal(ramfs);
75+
76+
auto terminal_task_handle = LibXR::Timer::CreateTask(terminal.TaskFun, &terminal, 1);
77+
LibXR::Timer::Add(terminal_task_handle);
78+
LibXR::Timer::Start(terminal_task_handle);
79+
LibXR::WriteOperation op;
80+
uart1.Write(LibXR::ConstRawData("Hello World!\r\n"), op);
81+
while (1)
82+
{
83+
LibXR::Thread::Sleep(1000);
84+
}
85+
}

User/main.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ __attribute__((interrupt)) void USB_HP_CAN1_TX_IRQHandler(void)
2323
tud_task();
2424
}
2525

26-
static void DefaultTask(void *pvParameters)
26+
static void DefaultTask(void* pvParameters)
2727
{
2828
(void)(pvParameters);
2929
app_main();
@@ -65,7 +65,7 @@ int main(void)
6565
RCC_OTGFSCLKConfig(otg_div);
6666
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_OTG_FS, ENABLE);
6767
__enable_irq();
68-
xTaskCreate(DefaultTask, "DefaultTask", 4096, NULL, 3, NULL);
68+
xTaskCreate(DefaultTask, "DefaultTask", 5000, NULL, 3, NULL);
6969
vTaskStartScheduler();
7070
return 0;
7171
}

0 commit comments

Comments
 (0)