diff --git a/board/GD32VF103C_START/BSP/Inc/mcu_init.h b/board/GD32VF103C_START/BSP/Inc/mcu_init.h new file mode 100644 index 00000000..7f906dd8 --- /dev/null +++ b/board/GD32VF103C_START/BSP/Inc/mcu_init.h @@ -0,0 +1,9 @@ +#ifndef __MCU_INIT_H +#define __MCU_INIT_H + +#include "gd32vf103.h" +#include "usart.h" + +void board_init(); + +#endif //__MCU_INIT_H diff --git a/board/GD32VF103C_START/BSP/Inc/usart.h b/board/GD32VF103C_START/BSP/Inc/usart.h new file mode 100644 index 00000000..bb5f1594 --- /dev/null +++ b/board/GD32VF103C_START/BSP/Inc/usart.h @@ -0,0 +1,10 @@ +#ifndef __USART_H +#define __USART_H + +#define USART0_GPIO_TX_PIN GPIO_PIN_9 +#define USART0_GPIO_RX_PIN GPIO_PIN_10 +#define USART0_GPIO_PORT GPIOA + +void usart0_init(int baud); + +#endif // __USART_H diff --git a/board/GD32VF103C_START/BSP/Src/mcu_init.c b/board/GD32VF103C_START/BSP/Src/mcu_init.c new file mode 100644 index 00000000..57aa3861 --- /dev/null +++ b/board/GD32VF103C_START/BSP/Src/mcu_init.c @@ -0,0 +1,9 @@ +#include "mcu_init.h" + +void board_init() { + rcu_periph_clock_enable(RCU_GPIOA); + + gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_7); + + gpio_bit_reset(GPIOA, GPIO_PIN_7); +} diff --git a/board/GD32VF103C_START/BSP/Src/usart.c b/board/GD32VF103C_START/BSP/Src/usart.c new file mode 100644 index 00000000..9d6c0d6f --- /dev/null +++ b/board/GD32VF103C_START/BSP/Src/usart.c @@ -0,0 +1,28 @@ +#include "gd32vf103.h" +#include "usart.h" +void usart0_init(int baud) +{ + /* enable GPIO clock */ + rcu_periph_clock_enable(RCU_GPIOA); + + /* enable USART0 clock */ + rcu_periph_clock_enable(RCU_USART0); + + /* connect port to USART0_Tx */ + gpio_init(USART0_GPIO_PORT, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, USART0_GPIO_TX_PIN); + + /* connect port to USART0_Rx */ + gpio_init(USART0_GPIO_PORT, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, USART0_GPIO_RX_PIN); + + /* USART0 configure */ + usart_deinit(USART0); + usart_baudrate_set(USART0, baud); + usart_word_length_set(USART0, USART_WL_8BIT); + usart_stop_bit_set(USART0, USART_STB_1BIT); + usart_parity_config(USART0, USART_PM_NONE); + usart_hardware_flow_rts_config(USART0, USART_RTS_DISABLE); + usart_hardware_flow_cts_config(USART0, USART_CTS_DISABLE); + usart_receive_config(USART0, USART_RECEIVE_ENABLE); + usart_transmit_config(USART0, USART_TRANSMIT_ENABLE); + usart_enable(USART0); +} diff --git a/board/GD32VF103C_START/eclipse/hello_world/.cproject b/board/GD32VF103C_START/eclipse/hello_world/.cproject index f8d3eea4..33bcd505 100644 --- a/board/GD32VF103C_START/eclipse/hello_world/.cproject +++ b/board/GD32VF103C_START/eclipse/hello_world/.cproject @@ -144,6 +144,8 @@ + + diff --git a/board/GD32VF103C_START/eclipse/hello_world/.project b/board/GD32VF103C_START/eclipse/hello_world/.project index 646d74fd..bda85e3d 100644 --- a/board/GD32VF103C_START/eclipse/hello_world/.project +++ b/board/GD32VF103C_START/eclipse/hello_world/.project @@ -39,6 +39,16 @@ 2 virtual:/virtual + + Application/Inc + 2 + TOP_DIR/board/GD32VF103C_START/BSP/Inc + + + Application/Src + 2 + TOP_DIR/board/GD32VF103C_START/BSP/Src + Application/tos_config.h 1 diff --git a/board/GD32VF103C_START/eclipse/hello_world/.settings/language.settings.xml b/board/GD32VF103C_START/eclipse/hello_world/.settings/language.settings.xml index 140cae41..1c9fb7ba 100644 --- a/board/GD32VF103C_START/eclipse/hello_world/.settings/language.settings.xml +++ b/board/GD32VF103C_START/eclipse/hello_world/.settings/language.settings.xml @@ -11,7 +11,7 @@ - + diff --git a/board/GD32VF103C_START/eclipse/hello_world/main.c b/board/GD32VF103C_START/eclipse/hello_world/main.c index 67072343..7248fd36 100644 --- a/board/GD32VF103C_START/eclipse/hello_world/main.c +++ b/board/GD32VF103C_START/eclipse/hello_world/main.c @@ -1,58 +1,68 @@ -#include "gd32vf103.h" -#include "tos.h" - -#define TASK_SIZE 512 -k_task_t k_task_task1; -k_task_t k_task_task2; -uint8_t k_task1_stk[TASK_SIZE]; -uint8_t k_task2_stk[TASK_SIZE]; - -int share = 0xCBA7F9; -k_sem_t sem; - -void task1(void *pdata) -{ - int task_cnt1 = 0; - while (1) { - task_cnt1++; - tos_sem_pend(&sem, ~0U); - gpio_bit_write(GPIOA, GPIO_PIN_7, share % 2); - } -} - -void task2(void *pdata) -{ - int task_cnt2 = 0; - while (1) { - task_cnt2--; - share++; - tos_task_delay(1000); - tos_sem_post(&sem); - } -} - - -void main(void) { - rcu_periph_clock_enable(RCU_GPIOA); - - gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_7); - - gpio_bit_reset(GPIOA, GPIO_PIN_7); - - tos_knl_init(); - - tos_task_create(&k_task_task1, "task1", task1, NULL, 3, k_task1_stk, TASK_SIZE, 0); - tos_task_create(&k_task_task2, "task2", task2, NULL, 3, k_task2_stk, TASK_SIZE, 0); - - k_err_t err = tos_sem_create(&sem, 1); - if (err != K_ERR_NONE) { - goto die; - } - - tos_knl_start(); - -die: - while (1) { - asm("wfi;"); - } -} +#include "mcu_init.h" +#include "tos.h" + +#define TASK_SIZE 1024 +k_task_t k_task_task1; +k_task_t k_task_task2; +uint8_t k_task1_stk[TASK_SIZE]; +uint8_t k_task2_stk[TASK_SIZE]; + +int share = 0xCBA7F9; +k_sem_t sem; + +void task1(void *pdata) +{ + int task_cnt1 = 0; + while (1) { + printf("hello world from %s cnt: %d\n", __func__, task_cnt1++); + tos_sem_pend(&sem, ~0U); + gpio_bit_write(GPIOA, GPIO_PIN_7, share % 2); + } +} + +void task2(void *pdata) +{ + int task_cnt2 = 0; + while (1) { + share++; + for(int i=0; i<5; i++) { + printf("hello world from %s cnt: %08x\n", __func__, task_cnt2--); + tos_task_delay(200); + } + tos_sem_post(&sem); + } +} + + +void main(void) { + board_init(); + + usart0_init(115200); + + tos_knl_init(); + + tos_task_create(&k_task_task1, "task1", task1, NULL, 3, k_task1_stk, TASK_SIZE, 0); + tos_task_create(&k_task_task2, "task2", task2, NULL, 3, k_task2_stk, TASK_SIZE, 0); + + k_err_t err = tos_sem_create(&sem, 1); + if (err != K_ERR_NONE) { + goto die; + } + + tos_knl_start(); + +die: + while (1) { + asm("wfi;"); + } +} + + +int _put_char(int ch) +{ + usart_data_transmit(USART0, (uint8_t) ch ); + while (usart_flag_get(USART0, USART_FLAG_TBE)== RESET){ + } + + return ch; +}