From bd407ece98dc6cf6df2caf1c367a0231b1e59898 Mon Sep 17 00:00:00 2001 From: acevest Date: Tue, 1 Oct 2019 17:18:54 +0800 Subject: [PATCH 1/3] add usart0, printf support for GD32VF103C_START board --- board/GD32VF103C_START/BSP/Inc/mcu_init.h | 9 ++ board/GD32VF103C_START/BSP/Inc/usart.h | 10 ++ board/GD32VF103C_START/BSP/Src/mcu_init.c | 11 ++ board/GD32VF103C_START/BSP/Src/usart.c | 30 +++++ .../eclipse/hello_world/.cproject | 2 + .../eclipse/hello_world/.project | 10 ++ .../.settings/language.settings.xml | 2 +- .../eclipse/hello_world/main.c | 124 ++++++++++-------- 8 files changed, 139 insertions(+), 59 deletions(-) create mode 100644 board/GD32VF103C_START/BSP/Inc/mcu_init.h create mode 100644 board/GD32VF103C_START/BSP/Inc/usart.h create mode 100644 board/GD32VF103C_START/BSP/Src/mcu_init.c create mode 100644 board/GD32VF103C_START/BSP/Src/usart.c 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..d6e2ddaf --- /dev/null +++ b/board/GD32VF103C_START/BSP/Src/mcu_init.c @@ -0,0 +1,11 @@ +#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); + + usart0_init(115200); +} diff --git a/board/GD32VF103C_START/BSP/Src/usart.c b/board/GD32VF103C_START/BSP/Src/usart.c new file mode 100644 index 00000000..5c809db1 --- /dev/null +++ b/board/GD32VF103C_START/BSP/Src/usart.c @@ -0,0 +1,30 @@ +#include "gd32vf103.h" +#include "usart.h" +void usart0_init(int baud) +{ + uint32_t com = USART0; + + /* enable GPIO clock */ + rcu_periph_clock_enable(RCU_GPIOA); + + /* enable USART clock */ + rcu_periph_clock_enable(RCU_USART0); + + /* connect port to USARTx_Tx */ + gpio_init(USART0_GPIO_PORT, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, USART0_GPIO_TX_PIN); + + /* connect port to USARTx_Rx */ + gpio_init(USART0_GPIO_PORT, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, USART0_GPIO_RX_PIN); + + /* USART configure */ + usart_deinit(com); + usart_baudrate_set(com, baud); + usart_word_length_set(com, USART_WL_8BIT); + usart_stop_bit_set(com, USART_STB_1BIT); + usart_parity_config(com, USART_PM_NONE); + usart_hardware_flow_rts_config(com, USART_RTS_DISABLE); + usart_hardware_flow_cts_config(com, USART_CTS_DISABLE); + usart_receive_config(com, USART_RECEIVE_ENABLE); + usart_transmit_config(com, USART_TRANSMIT_ENABLE); + usart_enable(com); +} 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..1c411df4 100644 --- a/board/GD32VF103C_START/eclipse/hello_world/main.c +++ b/board/GD32VF103C_START/eclipse/hello_world/main.c @@ -1,58 +1,66 @@ -#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(); + + 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; +} From 3c88162700b95a41ce3c2e74523fbaa293b0bbd9 Mon Sep 17 00:00:00 2001 From: acevest Date: Wed, 2 Oct 2019 11:05:04 +0800 Subject: [PATCH 2/3] move usart0_init to main --- board/GD32VF103C_START/BSP/Src/mcu_init.c | 2 - .../eclipse/hello_world/main.c | 44 ++++++++++--------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/board/GD32VF103C_START/BSP/Src/mcu_init.c b/board/GD32VF103C_START/BSP/Src/mcu_init.c index d6e2ddaf..57aa3861 100644 --- a/board/GD32VF103C_START/BSP/Src/mcu_init.c +++ b/board/GD32VF103C_START/BSP/Src/mcu_init.c @@ -6,6 +6,4 @@ void board_init() { gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_7); gpio_bit_reset(GPIOA, GPIO_PIN_7); - - usart0_init(115200); } diff --git a/board/GD32VF103C_START/eclipse/hello_world/main.c b/board/GD32VF103C_START/eclipse/hello_world/main.c index 1c411df4..7248fd36 100644 --- a/board/GD32VF103C_START/eclipse/hello_world/main.c +++ b/board/GD32VF103C_START/eclipse/hello_world/main.c @@ -12,47 +12,49 @@ 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); - } + 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) { + 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); - } + tos_sem_post(&sem); + } } void main(void) { board_init(); - tos_knl_init(); + usart0_init(115200); - 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); + tos_knl_init(); - k_err_t err = tos_sem_create(&sem, 1); - if (err != K_ERR_NONE) { - goto die; - } + 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); - tos_knl_start(); + k_err_t err = tos_sem_create(&sem, 1); + if (err != K_ERR_NONE) { + goto die; + } + + tos_knl_start(); die: - while (1) { - asm("wfi;"); - } + while (1) { + asm("wfi;"); + } } From 2e225ac46d0c9058efbe8a4fe7aedd8a695972a3 Mon Sep 17 00:00:00 2001 From: acevest Date: Fri, 4 Oct 2019 12:33:40 +0800 Subject: [PATCH 3/3] fix typo --- board/GD32VF103C_START/BSP/Src/usart.c | 30 ++++++++++++-------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/board/GD32VF103C_START/BSP/Src/usart.c b/board/GD32VF103C_START/BSP/Src/usart.c index 5c809db1..9d6c0d6f 100644 --- a/board/GD32VF103C_START/BSP/Src/usart.c +++ b/board/GD32VF103C_START/BSP/Src/usart.c @@ -2,29 +2,27 @@ #include "usart.h" void usart0_init(int baud) { - uint32_t com = USART0; - /* enable GPIO clock */ rcu_periph_clock_enable(RCU_GPIOA); - /* enable USART clock */ + /* enable USART0 clock */ rcu_periph_clock_enable(RCU_USART0); - /* connect port to USARTx_Tx */ + /* connect port to USART0_Tx */ gpio_init(USART0_GPIO_PORT, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, USART0_GPIO_TX_PIN); - /* connect port to USARTx_Rx */ + /* connect port to USART0_Rx */ gpio_init(USART0_GPIO_PORT, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, USART0_GPIO_RX_PIN); - /* USART configure */ - usart_deinit(com); - usart_baudrate_set(com, baud); - usart_word_length_set(com, USART_WL_8BIT); - usart_stop_bit_set(com, USART_STB_1BIT); - usart_parity_config(com, USART_PM_NONE); - usart_hardware_flow_rts_config(com, USART_RTS_DISABLE); - usart_hardware_flow_cts_config(com, USART_CTS_DISABLE); - usart_receive_config(com, USART_RECEIVE_ENABLE); - usart_transmit_config(com, USART_TRANSMIT_ENABLE); - usart_enable(com); + /* 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); }