Merge pull request #5258 from greedyhao/ab32
[bsp/bluetrum] add ble support
This commit is contained in:
commit
add6579d8f
|
@ -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
|
|
@ -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"
|
choice
|
||||||
endmenu
|
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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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 = .;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -48,8 +48,8 @@ ASFLAGS = ""
|
||||||
CPPDEFINES = []
|
CPPDEFINES = []
|
||||||
LOCAL_CPPDEFINES = []
|
LOCAL_CPPDEFINES = []
|
||||||
|
|
||||||
LIBS = ['hal']
|
LIBS = []
|
||||||
LIBPATH = [CWD]
|
LIBPATH = []
|
||||||
|
|
||||||
LINKFLAGS = ""
|
LINKFLAGS = ""
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue