summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgreedyhao <[email protected]>2021-11-05 17:16:44 +0800
committergreedyhao <[email protected]>2021-11-05 17:16:44 +0800
commitbae4de3b1b4ddefc3b9d5e1e6b98bfc2e9d2e5f6 (patch)
treec5c63841744af109b14212fda5cee77b6b5db849
parent9e7d7ae52544fd8e84f18734fd4216fc7659d9c9 (diff)
add ble support
-rw-r--r--bsp/bluetrum/ab32vg1-ab-prougen/applications/blehr_app.c74
-rw-r--r--bsp/bluetrum/ab32vg1-ab-prougen/board/Kconfig19
-rw-r--r--bsp/bluetrum/ab32vg1-ab-prougen/board/board.c5
-rw-r--r--bsp/bluetrum/ab32vg1-ab-prougen/link.lds21
-rw-r--r--bsp/bluetrum/libraries/hal_libraries/ab32vg1_hal/SConscript4
-rw-r--r--bsp/bluetrum/libraries/hal_libraries/bmsis/source/startup.S5
6 files changed, 119 insertions, 9 deletions
diff --git a/bsp/bluetrum/ab32vg1-ab-prougen/applications/blehr_app.c b/bsp/bluetrum/ab32vg1-ab-prougen/applications/blehr_app.c
new file mode 100644
index 0000000000..de1a6a16f7
--- /dev/null
+++ b/bsp/bluetrum/ab32vg1-ab-prougen/applications/blehr_app.c
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 2006-2021, Bluetrum Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2021-10-15 greedyhao the first version
+ */
+
+#include <rtthread.h>
+#include <stdint.h>
+#include <stddef.h>
+
+#ifdef BSP_USING_NIMBLE
+
+void nimble_port_run(void);
+void nimble_port_init(void);
+int ble_hci_rtthread_init(void);
+void ble_svc_gap_init(void);
+void ble_store_ram_init(void);
+int blehr_main(void);
+void bb_init(void);
+
+void bthw_get_heap_info(void **p_heap, uint16_t **p_heap_size, uint32_t *p_block_size);
+typedef void (*nsmem_cb_init_func)(void *heap_buf, void *heap_size_buf, uint32_t mem_block_max);
+#define nsmem_cb_init ((nsmem_cb_init_func)0x84140)
+
+int btctrl_mem_init(void)
+{
+ void *heap_buf;
+ uint16_t *heap_size_buf;
+ uint32_t block_size;
+
+ bthw_get_heap_info(&heap_buf, &heap_size_buf, &block_size);
+ // rt_kprintf("heap_buf=0x%p heap_size_buf=0x%p block_size=0x%p\n", heap_buf, heap_size_buf, block_size);
+ nsmem_cb_init(heap_buf, heap_size_buf, block_size);
+ return 0;
+}
+INIT_BOARD_EXPORT(btctrl_mem_init);
+
+static void blehr_thread_entry(void *param)
+{
+ bb_init();
+ nimble_port_init();
+
+ ble_hci_rtthread_init();
+ ble_svc_gap_init();
+
+ /* XXX Need to have template for store */
+ ble_store_ram_init();
+
+ blehr_main();
+
+ nimble_port_run();
+}
+
+static int blehr_sample(void)
+{
+ rt_thread_t tid = rt_thread_create(
+ "blehr",
+ blehr_thread_entry,
+ RT_NULL,
+ 1024,
+ 15,
+ 1);
+
+ if (tid != RT_NULL) {
+ rt_thread_startup(tid);
+ }
+}
+MSH_CMD_EXPORT(blehr_sample, blehr_sample);
+
+#endif
diff --git a/bsp/bluetrum/ab32vg1-ab-prougen/board/Kconfig b/bsp/bluetrum/ab32vg1-ab-prougen/board/Kconfig
index fddd4efb56..77ce8d5512 100644
--- a/bsp/bluetrum/ab32vg1-ab-prougen/board/Kconfig
+++ b/bsp/bluetrum/ab32vg1-ab-prougen/board/Kconfig
@@ -5,6 +5,10 @@ config SOC_AB32VG1
select PKG_USING_BLUETRUM_SDK
default y
+config PKG_USING_BLUETRUM_NIMBLE
+ bool
+ default n
+
menu "Onboard Peripheral Drivers"
menuconfig BSP_USING_AUDIO
@@ -231,7 +235,18 @@ menu "On-chip Peripheral Drivers"
endmenu
-menu "Board extended module Drivers"
-endmenu
+choice
+ prompt "BLE STACK"
+ default BLE_STACK_USING_NULL
+ help
+ Select the ble stack
+
+ config BLE_STACK_USING_NULL
+ bool "not use the ble stack"
+
+ config BSP_USING_NIMBLE
+ bool "use nimble stack(iot)"
+ select PKG_USING_BLUETRUM_NIMBLE
+endchoice
endmenu
diff --git a/bsp/bluetrum/ab32vg1-ab-prougen/board/board.c b/bsp/bluetrum/ab32vg1-ab-prougen/board/board.c
index 4246a92d0b..32714f6a4d 100644
--- a/bsp/bluetrum/ab32vg1-ab-prougen/board/board.c
+++ b/bsp/bluetrum/ab32vg1-ab-prougen/board/board.c
@@ -145,6 +145,11 @@ void rt_hw_board_init(void)
#endif
}
+void rt_hw_us_delay(rt_uint32_t us)
+{
+
+}
+
RT_SECTION(".irq.cache")
void cache_init(void)
{
diff --git a/bsp/bluetrum/ab32vg1-ab-prougen/link.lds b/bsp/bluetrum/ab32vg1-ab-prougen/link.lds
index 207eac849c..182b6d5225 100644
--- a/bsp/bluetrum/ab32vg1-ab-prougen/link.lds
+++ b/bsp/bluetrum/ab32vg1-ab-prougen/link.lds
@@ -1,17 +1,19 @@
/* Define the flash max size */
-__max_flash_size = 1024k;
+__max_flash_size = 1020k;
-__data_ram_size = 8k;
+__data_ram_size = 16k;
__stack_ram_size = 4k;
__comm_ram_size = 42k;
-__heap_ram_size = 70k;
+__heap_ram_size = 52k;
+__ble_ram_size = 10k;
__base = 0x10000000;
-__data_vma = 0x11000;
+__bram_vma = 0x11000;
+__heap_vma = __bram_vma + __ble_ram_size;
+__data_vma = __heap_vma + __heap_ram_size;
__stack_vma = __data_vma + __data_ram_size;
__comm_vma = __stack_vma + __stack_ram_size;
-__heap_vma = __comm_vma + __comm_ram_size;
__ram1_vma = 0x50000;
@@ -21,6 +23,7 @@ MEMORY
flash(rx) : org = __base + 512, len = __max_flash_size
comm(rx) : org = __comm_vma, len = __comm_ram_size
+ bram : org = __bram_vma, len = __ble_ram_size
data : org = __data_vma, len = __data_ram_size
stack : org = __stack_vma, len = __stack_ram_size
heap : org = __heap_vma, len = __heap_ram_size
@@ -89,8 +92,16 @@ SECTIONS
*(.data*)
*(.sdata*)
*(.com_text*)
+ *(.text.ble_mqueue_get)
+ *(.text.ble_mqueue_put)
+ *(.text.os_memblock_get)
} > comm AT > flash
+ .bram __bram_vma (NOLOAD) : {
+ *(.btmem.bthw)
+ *(.btmem*)
+ } > bram
+
.bss (NOLOAD):
{
__bss_start = .;
diff --git a/bsp/bluetrum/libraries/hal_libraries/ab32vg1_hal/SConscript b/bsp/bluetrum/libraries/hal_libraries/ab32vg1_hal/SConscript
index e30f216093..3321a76d91 100644
--- a/bsp/bluetrum/libraries/hal_libraries/ab32vg1_hal/SConscript
+++ b/bsp/bluetrum/libraries/hal_libraries/ab32vg1_hal/SConscript
@@ -48,8 +48,8 @@ ASFLAGS = ""
CPPDEFINES = []
LOCAL_CPPDEFINES = []
-LIBS = ['hal']
-LIBPATH = [CWD]
+LIBS = []
+LIBPATH = []
LINKFLAGS = ""
diff --git a/bsp/bluetrum/libraries/hal_libraries/bmsis/source/startup.S b/bsp/bluetrum/libraries/hal_libraries/bmsis/source/startup.S
index 8ea645316e..7903c38381 100644
--- a/bsp/bluetrum/libraries/hal_libraries/bmsis/source/startup.S
+++ b/bsp/bluetrum/libraries/hal_libraries/bmsis/source/startup.S
@@ -96,6 +96,11 @@ __exception:
mret
#endif
+ .org 0x1e0
+ 1: j 1b
+ nop
+ mret
+
.global cpu_irq_comm
cpu_irq_comm:
la a5, __irq_stack