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 0000000000000000000000000000000000000000..8dfe885baac94c135357161ef3a07898eb77c2d9 --- /dev/null +++ b/bsp/bluetrum/ab32vg1-ab-prougen/applications/blehr_app.c @@ -0,0 +1,73 @@ +/* + * 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 +#include +#include + +#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); + 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 fddd4efb56a74c3cc34dafcc8482d30b1323fa6d..77ce8d5512102e70f1545e1fdac2d46440c00347 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 4246a92d0bd3111bd8f43e35e7a8183cff387cf0..67a76885bbb281dbf026b43a374203038be3dd42 100644 --- a/bsp/bluetrum/ab32vg1-ab-prougen/board/board.c +++ b/bsp/bluetrum/ab32vg1-ab-prougen/board/board.c @@ -156,7 +156,6 @@ void cache_init(void) RT_SECTION(".irq.cache") void os_spiflash_lock(void) { - // if (rt_thread_self()->stat == RT_THREAD_RUNNING) { if ((rt_thread_self() != RT_NULL) && (rt_interrupt_nest == 0)) { rt_mutex_take(&mutex_spiflash, RT_WAITING_FOREVER); } @@ -165,7 +164,6 @@ void os_spiflash_lock(void) RT_SECTION(".irq.cache") void os_spiflash_unlock(void) { - // if (rt_thread_self()->stat == RT_THREAD_RUNNING) { if ((rt_thread_self() != RT_NULL) && (rt_interrupt_nest == 0)) { rt_mutex_release(&mutex_spiflash); } @@ -174,7 +172,6 @@ void os_spiflash_unlock(void) RT_SECTION(".irq.cache") void os_cache_lock(void) { - // if (rt_thread_self()->stat == RT_THREAD_RUNNING) { if ((rt_thread_self() != RT_NULL) && (rt_interrupt_nest == 0)) { rt_mutex_take(&mutex_cache, RT_WAITING_FOREVER); } @@ -183,7 +180,6 @@ void os_cache_lock(void) RT_SECTION(".irq.cache") void os_cache_unlock(void) { - // if (rt_thread_self()->stat == RT_THREAD_RUNNING) { if ((rt_thread_self() != RT_NULL) && (rt_interrupt_nest == 0)) { rt_mutex_release(&mutex_cache); } @@ -200,6 +196,8 @@ void rt_hw_console_output(const char *str) /** * @brief print exception error * @note Every message needed to print, must put in .comm exction. + * @note (IRQ in Flash: %x %x - %x %x\n, -, rt_interrupt_nest, PC, miss_addr) + * miss_addr: The address in map file minus 0x10000000 */ RT_SECTION(".irq.err") void exception_isr(void) diff --git a/bsp/bluetrum/ab32vg1-ab-prougen/link.lds b/bsp/bluetrum/ab32vg1-ab-prougen/link.lds index 207eac849c4ac87acec68d85f0caef1e53c17ee5..d1522d7cfa0ac2b4571127154cbd713b1d669ef4 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_drivers/drv_gpio.c b/bsp/bluetrum/libraries/hal_drivers/drv_gpio.c index a99f5561ca3369ad10a9f2289e02bd0f30b1b31d..0ba351d584159d93a2b1d93229b7312921a44361 100644 --- a/bsp/bluetrum/libraries/hal_drivers/drv_gpio.c +++ b/bsp/bluetrum/libraries/hal_drivers/drv_gpio.c @@ -128,6 +128,9 @@ static void ab32_pin_mode(rt_device_t dev, rt_base_t pin, rt_base_t mode) switch (mode) { case PIN_MODE_INPUT: + gpio_init.pull = GPIO_NOPULL; + gpio_init.dir = GPIO_DIR_INPUT; + break; case PIN_MODE_INPUT_PULLUP: gpio_init.pull = GPIO_PULLUP; gpio_init.dir = GPIO_DIR_INPUT; diff --git a/bsp/bluetrum/libraries/hal_drivers/drv_rtc.c b/bsp/bluetrum/libraries/hal_drivers/drv_rtc.c index d972f89692dac168f1f8a4c1c48a2665a4c98a13..56c75aae595a6f78539cc746ab0e5075c6a8f39b 100644 --- a/bsp/bluetrum/libraries/hal_drivers/drv_rtc.c +++ b/bsp/bluetrum/libraries/hal_drivers/drv_rtc.c @@ -16,6 +16,10 @@ #ifdef BSP_USING_ONCHIP_RTC +#if RTTHREAD_VERSION < 40004 +#error "RTTHREAD_VERSION is less than 4.0.4" +#endif + //#define DRV_DEBUG #define LOG_TAG "drv.rtc" #include diff --git a/bsp/bluetrum/libraries/hal_libraries/ab32vg1_hal/SConscript b/bsp/bluetrum/libraries/hal_libraries/ab32vg1_hal/SConscript index e30f2160939f94b049bde43e2cedb99906af7396..3321a76d91fc884bbfaeec415e5aa4b690e45890 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/ab32vg1_hal/source/ab32vg1_hal_gpio.c b/bsp/bluetrum/libraries/hal_libraries/ab32vg1_hal/source/ab32vg1_hal_gpio.c index 0a3fe3184410fb8d0384d151ba4c481f88276866..7b1601befdd2ffbc2b5eff0db6b71363d007d4c9 100644 --- a/bsp/bluetrum/libraries/hal_libraries/ab32vg1_hal/source/ab32vg1_hal_gpio.c +++ b/bsp/bluetrum/libraries/hal_libraries/ab32vg1_hal/source/ab32vg1_hal_gpio.c @@ -72,12 +72,16 @@ void hal_gpio_init(hal_sfr_t gpiox, gpio_init_t gpio_init) switch (gpio_init->pull) { case GPIO_PULLUP: + gpiox[GPIOxPD] &= ~BIT(iocurrent); gpiox[GPIOxPU] |= BIT(iocurrent); break; case GPIO_PULLDOWN: + gpiox[GPIOxPU] &= ~BIT(iocurrent); gpiox[GPIOxPD] |= BIT(iocurrent); break; case GPIO_NOPULL: + gpiox[GPIOxPU] &= ~BIT(iocurrent); + gpiox[GPIOxPD] &= ~BIT(iocurrent); default: break; } diff --git a/bsp/bluetrum/libraries/hal_libraries/bmsis/source/startup.S b/bsp/bluetrum/libraries/hal_libraries/bmsis/source/startup.S index 8ea645316e255e7c8007d9d6c94a62d8ce362d62..7903c383819edc747a0e8c9ba8dafa8760abd5b7 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