Browse Source

Merge pull request #5258 from greedyhao/ab32

[bsp/bluetrum] add ble support
Bernard Xiong 3 years ago
parent
commit
add6579d8f

+ 73 - 0
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 <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);
+    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

+ 17 - 2
bsp/bluetrum/ab32vg1-ab-prougen/board/Kconfig

@@ -5,6 +5,10 @@ config SOC_AB32VG1
     select PKG_USING_BLUETRUM_SDK
     select PKG_USING_BLUETRUM_SDK
     default y
     default y
 
 
+config PKG_USING_BLUETRUM_NIMBLE
+    bool
+    default n
+
 menu "Onboard Peripheral Drivers"
 menu "Onboard Peripheral Drivers"
 
 
     menuconfig BSP_USING_AUDIO
     menuconfig BSP_USING_AUDIO
@@ -231,7 +235,18 @@ menu "On-chip Peripheral Drivers"
 
 
 endmenu
 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
 endmenu

+ 2 - 4
bsp/bluetrum/ab32vg1-ab-prougen/board/board.c

@@ -156,7 +156,6 @@ void cache_init(void)
 RT_SECTION(".irq.cache")
 RT_SECTION(".irq.cache")
 void os_spiflash_lock(void)
 void os_spiflash_lock(void)
 {
 {
-    // if (rt_thread_self()->stat == RT_THREAD_RUNNING) {
     if ((rt_thread_self() != RT_NULL) && (rt_interrupt_nest == 0)) {
     if ((rt_thread_self() != RT_NULL) && (rt_interrupt_nest == 0)) {
         rt_mutex_take(&mutex_spiflash, RT_WAITING_FOREVER);
         rt_mutex_take(&mutex_spiflash, RT_WAITING_FOREVER);
     }
     }
@@ -165,7 +164,6 @@ void os_spiflash_lock(void)
 RT_SECTION(".irq.cache")
 RT_SECTION(".irq.cache")
 void os_spiflash_unlock(void)
 void os_spiflash_unlock(void)
 {
 {
-    // if (rt_thread_self()->stat == RT_THREAD_RUNNING) {
     if ((rt_thread_self() != RT_NULL) && (rt_interrupt_nest == 0)) {
     if ((rt_thread_self() != RT_NULL) && (rt_interrupt_nest == 0)) {
         rt_mutex_release(&mutex_spiflash);
         rt_mutex_release(&mutex_spiflash);
     }
     }
@@ -174,7 +172,6 @@ void os_spiflash_unlock(void)
 RT_SECTION(".irq.cache")
 RT_SECTION(".irq.cache")
 void os_cache_lock(void)
 void os_cache_lock(void)
 {
 {
-    // if (rt_thread_self()->stat == RT_THREAD_RUNNING) {
     if ((rt_thread_self() != RT_NULL) && (rt_interrupt_nest == 0)) {
     if ((rt_thread_self() != RT_NULL) && (rt_interrupt_nest == 0)) {
         rt_mutex_take(&mutex_cache, RT_WAITING_FOREVER);
         rt_mutex_take(&mutex_cache, RT_WAITING_FOREVER);
     }
     }
@@ -183,7 +180,6 @@ void os_cache_lock(void)
 RT_SECTION(".irq.cache")
 RT_SECTION(".irq.cache")
 void os_cache_unlock(void)
 void os_cache_unlock(void)
 {
 {
-    // if (rt_thread_self()->stat == RT_THREAD_RUNNING) {
     if ((rt_thread_self() != RT_NULL) && (rt_interrupt_nest == 0)) {
     if ((rt_thread_self() != RT_NULL) && (rt_interrupt_nest == 0)) {
         rt_mutex_release(&mutex_cache);
         rt_mutex_release(&mutex_cache);
     }
     }
@@ -200,6 +196,8 @@ void rt_hw_console_output(const char *str)
 /**
 /**
  * @brief print exception error
  * @brief print exception error
  * @note Every message needed to print, must put in .comm exction.
  * @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")
 RT_SECTION(".irq.err")
 void exception_isr(void)
 void exception_isr(void)

+ 16 - 5
bsp/bluetrum/ab32vg1-ab-prougen/link.lds

@@ -1,17 +1,19 @@
 /* Define the flash max size */
 /* 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;
 __stack_ram_size = 4k;
 __comm_ram_size = 42k;
 __comm_ram_size = 42k;
-__heap_ram_size = 70k;
+__heap_ram_size = 52k;
+__ble_ram_size = 10k;
 
 
 __base = 0x10000000;
 __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;
 __stack_vma = __data_vma + __data_ram_size;
 __comm_vma = __stack_vma + __stack_ram_size;
 __comm_vma = __stack_vma + __stack_ram_size;
-__heap_vma = __comm_vma + __comm_ram_size;
 
 
 __ram1_vma = 0x50000;
 __ram1_vma = 0x50000;
 
 
@@ -21,6 +23,7 @@ MEMORY
     flash(rx)       : org = __base + 512,       len = __max_flash_size
     flash(rx)       : org = __base + 512,       len = __max_flash_size
     comm(rx)        : org = __comm_vma,         len = __comm_ram_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
     data            : org = __data_vma,         len = __data_ram_size
     stack           : org = __stack_vma,        len = __stack_ram_size
     stack           : org = __stack_vma,        len = __stack_ram_size
     heap            : org = __heap_vma,         len = __heap_ram_size
     heap            : org = __heap_vma,         len = __heap_ram_size
@@ -89,8 +92,16 @@ SECTIONS
         *(.data*)
         *(.data*)
         *(.sdata*)
         *(.sdata*)
         *(.com_text*)
         *(.com_text*)
+        *(.text.ble_mqueue_get)
+        *(.text.ble_mqueue_put)
+        *(.text.os_memblock_get)
     } > comm AT > flash
     } > comm AT > flash
 
 
+    .bram __bram_vma (NOLOAD) : {
+        *(.btmem.bthw)
+        *(.btmem*)
+    } > bram
+
     .bss (NOLOAD):
     .bss (NOLOAD):
     {
     {
         __bss_start = .;
         __bss_start = .;

+ 3 - 0
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)
     switch (mode)
     {
     {
     case PIN_MODE_INPUT:
     case PIN_MODE_INPUT:
+        gpio_init.pull = GPIO_NOPULL;
+        gpio_init.dir = GPIO_DIR_INPUT;
+        break;
     case PIN_MODE_INPUT_PULLUP:
     case PIN_MODE_INPUT_PULLUP:
         gpio_init.pull = GPIO_PULLUP;
         gpio_init.pull = GPIO_PULLUP;
         gpio_init.dir = GPIO_DIR_INPUT;
         gpio_init.dir = GPIO_DIR_INPUT;

+ 4 - 0
bsp/bluetrum/libraries/hal_drivers/drv_rtc.c

@@ -16,6 +16,10 @@
 
 
 #ifdef BSP_USING_ONCHIP_RTC
 #ifdef BSP_USING_ONCHIP_RTC
 
 
+#if RTTHREAD_VERSION < 40004
+#error "RTTHREAD_VERSION is less than 4.0.4"
+#endif
+
 //#define DRV_DEBUG
 //#define DRV_DEBUG
 #define LOG_TAG             "drv.rtc"
 #define LOG_TAG             "drv.rtc"
 #include <drv_log.h>
 #include <drv_log.h>

+ 2 - 2
bsp/bluetrum/libraries/hal_libraries/ab32vg1_hal/SConscript

@@ -48,8 +48,8 @@ ASFLAGS          = ""
 CPPDEFINES       = []
 CPPDEFINES       = []
 LOCAL_CPPDEFINES = []
 LOCAL_CPPDEFINES = []
 
 
-LIBS             = ['hal'] 
-LIBPATH          = [CWD]
+LIBS             = [] 
+LIBPATH          = []
 
 
 LINKFLAGS        = "" 
 LINKFLAGS        = "" 
 
 

+ 4 - 0
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)
             switch (gpio_init->pull)
             {
             {
             case GPIO_PULLUP:
             case GPIO_PULLUP:
+                gpiox[GPIOxPD] &= ~BIT(iocurrent);
                 gpiox[GPIOxPU] |= BIT(iocurrent);
                 gpiox[GPIOxPU] |= BIT(iocurrent);
                 break;
                 break;
             case GPIO_PULLDOWN:
             case GPIO_PULLDOWN:
+                gpiox[GPIOxPU] &= ~BIT(iocurrent);
                 gpiox[GPIOxPD] |= BIT(iocurrent);
                 gpiox[GPIOxPD] |= BIT(iocurrent);
                 break;
                 break;
             case GPIO_NOPULL:
             case GPIO_NOPULL:
+                gpiox[GPIOxPU] &= ~BIT(iocurrent);
+                gpiox[GPIOxPD] &= ~BIT(iocurrent);
             default:
             default:
                 break;
                 break;
             }
             }

+ 5 - 0
bsp/bluetrum/libraries/hal_libraries/bmsis/source/startup.S

@@ -96,6 +96,11 @@ __exception:
     mret
     mret
 #endif
 #endif
 
 
+    .org    0x1e0
+    1: j       1b
+    nop
+    mret
+
     .global cpu_irq_comm
     .global cpu_irq_comm
 cpu_irq_comm:
 cpu_irq_comm:
     la      a5, __irq_stack
     la      a5, __irq_stack