508 lines
16 KiB
C
508 lines
16 KiB
C
/*
|
||
main.c
|
||
*/
|
||
|
||
#include "bus_dev.h"
|
||
#include "config.h"
|
||
#include "gpio.h"
|
||
#include "clock.h"
|
||
#include "global_config.h"
|
||
#include "timer.h"
|
||
#include "jump_function.h"
|
||
#include "pwrmgr.h"
|
||
#include "mcu.h"
|
||
#include "gpio.h"
|
||
#include "log.h"
|
||
#include "rf_phy_driver.h"
|
||
#include "flash.h"
|
||
#include "flash_eep.h"
|
||
#include "version.h"
|
||
#include "watchdog.h"
|
||
#include "adc.h"
|
||
#include "ble_ota.h"
|
||
|
||
#define DEFAULT_UART_BAUD 115200
|
||
|
||
/*********************************************************************
|
||
LOCAL FUNCTION PROTOTYPES
|
||
*/
|
||
|
||
/*********************************************************************
|
||
EXTERNAL FUNCTIONS
|
||
*/
|
||
|
||
extern void init_config(void);
|
||
extern void app_main(void);
|
||
extern void hal_rom_boot_init(void);
|
||
/*********************************************************************
|
||
CONNECTION CONTEXT RELATE DEFINITION
|
||
*/
|
||
|
||
#define BLE_MAX_ALLOW_CONNECTION 1
|
||
#define BLE_MAX_ALLOW_PKT_PER_EVENT_TX 3
|
||
#define BLE_MAX_ALLOW_PKT_PER_EVENT_RX 3
|
||
#define BLE_PKT_VERSION BLE_PKT_VERSION_5_1 // BLE_PKT_VERSION_4_0
|
||
|
||
/* BLE_MAX_ALLOW_PER_CONNECTION
|
||
{
|
||
...
|
||
struct ll_pkt_desc *tx_conn_desc[MAX_LL_BUF_LEN]; // new Tx data buffer
|
||
struct ll_pkt_desc *rx_conn_desc[MAX_LL_BUF_LEN];
|
||
|
||
struct ll_pkt_desc *tx_not_ack_pkt;
|
||
struct ll_pkt_desc *tx_ntrm_pkts[MAX_LL_BUF_LEN];
|
||
...
|
||
}
|
||
tx_conn_desc[] + tx_ntrm_pkts[] --> BLE_MAX_ALLOW_PKT_PER_EVENT_TX * BLE_PKT_BUF_SIZE*2
|
||
rx_conn_desc[] --> BLE_MAX_ALLOW_PKT_PER_EVENT_RX * BLE_PKT_BUF_SIZE
|
||
tx_not_ack_pkt --> 1*BLE_PKT_BUF_SIZE
|
||
|
||
*/
|
||
|
||
#define BLE_PKT_BUF_SIZE (((BLE_PKT_VERSION == BLE_PKT_VERSION_5_1) ? 1 : 0) * BLE_PKT51_LEN \
|
||
+ ((BLE_PKT_VERSION == BLE_PKT_VERSION_4_0) ? 1 : 0) * BLE_PKT40_LEN \
|
||
+ (sizeof(struct ll_pkt_desc) - 2))
|
||
|
||
#define BLE_MAX_ALLOW_PER_CONNECTION ( (BLE_MAX_ALLOW_PKT_PER_EVENT_TX * BLE_PKT_BUF_SIZE*2) \
|
||
+(BLE_MAX_ALLOW_PKT_PER_EVENT_RX * BLE_PKT_BUF_SIZE) \
|
||
+ BLE_PKT_BUF_SIZE )
|
||
|
||
#define BLE_CONN_BUF_SIZE (BLE_MAX_ALLOW_CONNECTION * BLE_MAX_ALLOW_PER_CONNECTION)
|
||
|
||
ALIGN4_U8 g_pConnectionBuffer[BLE_CONN_BUF_SIZE];
|
||
llConnState_t pConnContext[BLE_MAX_ALLOW_CONNECTION];
|
||
|
||
/*********************************************************************
|
||
CTE IQ SAMPLE BUF config
|
||
*/
|
||
//#define BLE_SUPPORT_CTE_IQ_SAMPLE TRUE
|
||
#ifdef BLE_SUPPORT_CTE_IQ_SAMPLE
|
||
uint16 g_llCteSampleI[LL_CTE_MAX_SUPP_LEN * LL_CTE_SUPP_LEN_UNIT];
|
||
uint16 g_llCteSampleQ[LL_CTE_MAX_SUPP_LEN * LL_CTE_SUPP_LEN_UNIT];
|
||
#endif
|
||
|
||
/*********************************************************************
|
||
OSAL LARGE HEAP CONFIG
|
||
*/
|
||
#define LARGE_HEAP_SIZE (4*1024)
|
||
ALIGN4_U8 g_largeHeap[LARGE_HEAP_SIZE];
|
||
|
||
#if 0 // SDK_VER_RELEASE_ID >= 0x030103 ?
|
||
#define LL_LINKBUF_CFG_NUM 0
|
||
#define LL_PKT_BUFSIZE 280
|
||
#define LL_LINK_HEAP_SIZE ( ( BLE_MAX_ALLOW_CONNECTION * 3 + LL_LINKBUF_CFG_NUM ) * LL_PKT_BUFSIZE )//basic Space + configurable Space
|
||
ALIGN4_U8 g_llLinkHeap[LL_LINK_HEAP_SIZE];
|
||
#endif
|
||
|
||
/*********************************************************************
|
||
GLOBAL VARIABLES
|
||
*/
|
||
volatile uint8 g_clk32K_config;
|
||
volatile sysclk_t g_spif_clk_config;
|
||
|
||
/*********************************************************************
|
||
EXTERNAL VARIABLES
|
||
*/
|
||
//extern uint32_t __initial_sp;
|
||
|
||
static void hal_low_power_io_init(void) {
|
||
//========= disable all gpio pullup/down to preserve juice
|
||
const ioinit_cfg_t ioInit[] = {
|
||
#if DEVICE == DEVICE_THB2
|
||
{ GPIO_P00, GPIO_PULL_DOWN },
|
||
{ GPIO_P01, GPIO_PULL_DOWN },
|
||
#ifdef GPIO_TRG
|
||
{ GPIO_P02, GPIO_FLOATING }, // TX2 - GPIO_TRG
|
||
#else
|
||
{ GPIO_P02, GPIO_PULL_UP }, // TX2
|
||
#endif
|
||
{ GPIO_P03, GPIO_PULL_DOWN },
|
||
{ GPIO_P07, GPIO_PULL_UP }, // KEY
|
||
{ GPIO_P09, GPIO_PULL_UP }, // TX
|
||
{ GPIO_P10, GPIO_PULL_UP }, // RX - GPIO_INP
|
||
{ GPIO_P11, GPIO_FLOATING }, // ADC_VBAT
|
||
{ GPIO_P14, GPIO_PULL_DOWN },
|
||
{ GPIO_P15, GPIO_PULL_DOWN },
|
||
{ GPIO_P16, GPIO_PULL_DOWN },
|
||
{ GPIO_P17, GPIO_PULL_DOWN },
|
||
{ GPIO_P18, GPIO_FLOATING }, // I2C_SDA
|
||
{ GPIO_P20, GPIO_FLOATING }, // I2C_SCL
|
||
{ GPIO_P23, GPIO_PULL_DOWN },
|
||
{ GPIO_P24, GPIO_PULL_DOWN },
|
||
{ GPIO_P25, GPIO_PULL_DOWN },
|
||
#ifdef GPIO_LED
|
||
{ GPIO_P26, GPIO_FLOATING }, // LED - GPIO_LED
|
||
#else
|
||
{ GPIO_P26, GPIO_FLOATING }, // LED - GPIO_LED
|
||
#endif
|
||
// {GPIO_P27, GPIO_FLOATING },
|
||
{ GPIO_P31, GPIO_PULL_DOWN },
|
||
{ GPIO_P32, GPIO_PULL_DOWN },
|
||
{ GPIO_P33, GPIO_PULL_DOWN },
|
||
{ GPIO_P34, GPIO_PULL_DOWN }
|
||
#elif (DEVICE == DEVICE_BTH01)
|
||
{ GPIO_P00, GPIO_PULL_UP_S }, // GPIO_SPWR Sensor Vdd
|
||
{ GPIO_P01, GPIO_PULL_DOWN },
|
||
{ GPIO_P02, GPIO_PULL_DOWN },
|
||
{ GPIO_P03, GPIO_PULL_DOWN },
|
||
{ GPIO_P07, GPIO_PULL_DOWN },
|
||
{ GPIO_P09, GPIO_PULL_UP }, // TX1
|
||
{ GPIO_P10, GPIO_PULL_UP }, // RX1
|
||
{ GPIO_P11, GPIO_PULL_UP }, // ADC Vbat
|
||
{ GPIO_P14, GPIO_PULL_UP }, // KEY
|
||
#ifdef GPIO_LED
|
||
{ GPIO_P15, GPIO_FLOATING }, // LED - GPIO_LED
|
||
#else
|
||
{ GPIO_P15, GPIO_PULL_DOWN },
|
||
#endif
|
||
{ GPIO_P16, GPIO_PULL_DOWN },
|
||
{ GPIO_P17, GPIO_PULL_DOWN },
|
||
{ GPIO_P18, GPIO_PULL_UP }, // RX2 - GPIO_INP
|
||
#ifdef GPIO_TRG
|
||
{ GPIO_P20, GPIO_FLOATING }, // TX2 - GPIO_TRG
|
||
#else
|
||
{ GPIO_P20, GPIO_PULL_UP }, // TX2 - GPIO_TRG
|
||
#endif
|
||
{ GPIO_P23, GPIO_PULL_DOWN },
|
||
{ GPIO_P24, GPIO_PULL_DOWN },
|
||
{ GPIO_P25, GPIO_PULL_DOWN }, // P25
|
||
{ GPIO_P26, GPIO_PULL_DOWN },
|
||
// {GPIO_P27, GPIO_FLOATING },
|
||
{ GPIO_P31, GPIO_PULL_DOWN },
|
||
{ GPIO_P32, GPIO_PULL_DOWN },
|
||
{ GPIO_P33, GPIO_FLOATING }, // I2C_SDA
|
||
{ GPIO_P34, GPIO_FLOATING } // // I2C_SCL
|
||
#elif (DEVICE == DEVICE_TH05)
|
||
{ GPIO_P00, GPIO_PULL_UP_S }, // GPIO_SPWR Sensor Vdd
|
||
{ GPIO_P01, GPIO_PULL_DOWN },
|
||
{ GPIO_P02, GPIO_PULL_UP }, // GPIO_LPWR
|
||
{ GPIO_P03, GPIO_PULL_DOWN },
|
||
{ GPIO_P07, GPIO_PULL_DOWN },
|
||
{ GPIO_P09, GPIO_PULL_UP }, // TX1
|
||
{ GPIO_P10, GPIO_PULL_UP }, // RX1
|
||
{ GPIO_P11, GPIO_PULL_UP }, // ADC Vbat
|
||
{ GPIO_P14, GPIO_PULL_UP }, // KEY - GPIO_KEY
|
||
{ GPIO_P15, GPIO_PULL_DOWN },
|
||
{ GPIO_P16, GPIO_PULL_DOWN },
|
||
{ GPIO_P17, GPIO_PULL_DOWN },
|
||
{ GPIO_P18, GPIO_PULL_UP }, // RX2 - GPIO_INP
|
||
#ifdef GPIO_TRG
|
||
{ GPIO_P20, GPIO_FLOATING }, // TX2 - GPIO_TRG
|
||
#else
|
||
{ GPIO_P20, GPIO_PULL_UP }, // TX2 - GPIO_TRG
|
||
#endif
|
||
|
||
{ GPIO_P23, GPIO_PULL_DOWN },
|
||
{ GPIO_P24, GPIO_PULL_DOWN },
|
||
{ GPIO_P25, GPIO_PULL_DOWN }, // P25
|
||
{ GPIO_P26, GPIO_PULL_DOWN },
|
||
// {GPIO_P27, GPIO_FLOATING },
|
||
{ GPIO_P31, GPIO_PULL_DOWN },
|
||
{ GPIO_P32, GPIO_PULL_DOWN },
|
||
{ GPIO_P33, GPIO_FLOATING }, // I2C_SDA
|
||
{ GPIO_P34, GPIO_FLOATING } // I2C_SCL
|
||
|
||
#elif (DEVICE == DEVICE_THB1) || (DEVICE == DEVICE_THB3)
|
||
{ GPIO_P00, GPIO_PULL_DOWN },
|
||
{ GPIO_P01, GPIO_PULL_UP }, // KEY - GPIO_KEY
|
||
{ GPIO_P02, GPIO_PULL_DOWN },
|
||
{ GPIO_P03, GPIO_PULL_DOWN },
|
||
{ GPIO_P07, GPIO_PULL_DOWN },
|
||
#ifdef GPIO_TRG
|
||
{ GPIO_P09, GPIO_FLOATING }, // TX - GPIO_TRG
|
||
#else
|
||
{ GPIO_P09, GPIO_PULL_UP }, // TX
|
||
#endif
|
||
{ GPIO_P10, GPIO_PULL_UP }, // RX - GPIO_INP
|
||
{ GPIO_P11, GPIO_FLOATING }, // ADC Vbat с делителем! Не используется - Выкусить резистор R3!
|
||
{ GPIO_P14, GPIO_PULL_UP }, // назначен как ADC_PIN, т.к. вывод P11 подключен к делителю
|
||
{ GPIO_P15, GPIO_PULL_DOWN },
|
||
{ GPIO_P16, GPIO_PULL_DOWN },
|
||
{ GPIO_P17, GPIO_PULL_DOWN },
|
||
{ GPIO_P18, GPIO_FLOATING }, // I2C_SDA CHT8310
|
||
{ GPIO_P20, GPIO_FLOATING }, // I2C_SCL CHT8310
|
||
{ GPIO_P23, GPIO_PULL_DOWN },
|
||
{ GPIO_P24, GPIO_PULL_DOWN },
|
||
{ GPIO_P25, GPIO_PULL_DOWN },
|
||
{ GPIO_P26, GPIO_PULL_DOWN },
|
||
// { GPIO_P27, GPIO_PULL_DOWN },
|
||
{ GPIO_P31, GPIO_PULL_DOWN },
|
||
{ GPIO_P32, GPIO_PULL_DOWN },
|
||
{ GPIO_P33, GPIO_PULL_UP }, // I2C_SDA CNV1972
|
||
{ GPIO_P34, GPIO_PULL_UP } // I2C_SCL CNV1972
|
||
#elif (DEVICE == DEVICE_TH05D)
|
||
#ifdef GPIO_LED
|
||
{ GPIO_P00, GPIO_FLOATING }, // LED
|
||
#else
|
||
{ GPIO_P00, GPIO_PULL_DOWN }, // LED - не припаян R1 Q10 ...
|
||
#endif
|
||
{ GPIO_P01, GPIO_PULL_DOWN },
|
||
{ GPIO_P02, GPIO_PULL_UP }, // KEY - GPIO_KEY
|
||
{ GPIO_P03, GPIO_PULL_DOWN },
|
||
{ GPIO_P07, GPIO_PULL_UP }, // CHT8305 Alert
|
||
#ifdef GPIO_TRG
|
||
{ GPIO_P09, GPIO_FLOATING }, // TX - GPIO_TRG
|
||
#else
|
||
{ GPIO_P09, GPIO_PULL_UP }, // TX
|
||
#endif
|
||
{ GPIO_P10, GPIO_PULL_UP }, // RX - GPIO_INP
|
||
{ GPIO_P11, GPIO_FLOATING }, // BL55072 SDA
|
||
{ GPIO_P14, GPIO_FLOATING }, // BL55072 SCL
|
||
{ GPIO_P15, GPIO_PULL_UP }, // назначен как ADC_PIN, т.к. вывод P20 подключен к делителю
|
||
{ GPIO_P16, GPIO_PULL_DOWN },
|
||
{ GPIO_P17, GPIO_PULL_DOWN },
|
||
{ GPIO_P18, GPIO_FLOATING }, // I2C_SDA CHT8310
|
||
{ GPIO_P20, GPIO_FLOATING }, // ADC Vbat с делителем! Не используется - Выкусить резистор R18!
|
||
{ GPIO_P23, GPIO_PULL_DOWN },
|
||
{ GPIO_P24, GPIO_PULL_DOWN },
|
||
{ GPIO_P25, GPIO_PULL_DOWN },
|
||
{ GPIO_P26, GPIO_PULL_DOWN },
|
||
// { GPIO_P27, GPIO_PULL_DOWN },
|
||
{ GPIO_P31, GPIO_FLOATING }, // CHT8305 SDA
|
||
{ GPIO_P32, GPIO_FLOATING }, // CHT8305 SCL
|
||
{ GPIO_P33, GPIO_PULL_DOWN },
|
||
{ GPIO_P34, GPIO_PULL_DOWN }
|
||
#elif (DEVICE == DEVICE_TH05F)
|
||
{ GPIO_P00, GPIO_PULL_UP_S }, // GPIO_SPWR Sensor Vdd
|
||
{ GPIO_P01, GPIO_PULL_DOWN },
|
||
{ GPIO_P02, GPIO_FLOATING }, // GPIO_LPWR питание LCD драйвера
|
||
{ GPIO_P03, GPIO_PULL_DOWN },
|
||
{ GPIO_P07, GPIO_PULL_DOWN },
|
||
{ GPIO_P09, GPIO_PULL_UP }, // TX
|
||
{ GPIO_P10, GPIO_PULL_UP }, // RX - GPIO_INP
|
||
{ GPIO_P11, GPIO_PULL_UP }, // назначен как ADC_PIN
|
||
{ GPIO_P14, GPIO_PULL_UP }, // KEY - GPIO_KEY
|
||
#ifdef GPIO_LED
|
||
{ GPIO_P15, GPIO_FLOATING }, // LED (R7/D1/GND)
|
||
#else
|
||
{ GPIO_P15, GPIO_PULL_UP }, // LED (R7/D1/GND)
|
||
#endif
|
||
{ GPIO_P16, GPIO_PULL_DOWN },
|
||
{ GPIO_P17, GPIO_PULL_DOWN },
|
||
{ GPIO_P18, GPIO_PULL_UP }, // RX2
|
||
#ifdef GPIO_TRG
|
||
{ GPIO_P20, GPIO_FLOATING }, // TX2 - GPIO_TRG
|
||
#else
|
||
{ GPIO_P20, GPIO_PULL_UP }, // TX2 - GPIO_TRG
|
||
#endif
|
||
{ GPIO_P23, GPIO_PULL_DOWN },
|
||
{ GPIO_P24, GPIO_PULL_DOWN },
|
||
{ GPIO_P25, GPIO_PULL_DOWN }, // mark "P25"
|
||
{ GPIO_P26, GPIO_FLOATING }, // LCD I2C SDA
|
||
// { GPIO_P27, GPIO_PULL_DOWN },
|
||
{ GPIO_P31, GPIO_FLOATING }, // LCD I2C SCL
|
||
{ GPIO_P32, GPIO_PULL_DOWN },
|
||
{ GPIO_P33, GPIO_FLOATING }, // CHT8305 SDA
|
||
{ GPIO_P34, GPIO_FLOATING } // CHT8305 SCL
|
||
#elif (DEVICE == DEVICE_KEY2)
|
||
{ GPIO_P02, GPIO_FLOATING }, // connect to +Vbat ?
|
||
#ifdef GPIO_LED
|
||
{ GPIO_P03, GPIO_FLOATING }, // LED - GPIO_LED
|
||
#else
|
||
{ GPIO_P03, GPIO_PULL_DOWN },
|
||
#endif
|
||
{ GPIO_P07, GPIO_PULL_DOWN }, // mark "SWS"
|
||
{ GPIO_P09, GPIO_PULL_DOWN }, // TX Buzzer
|
||
{ GPIO_P10, GPIO_PULL_DOWN}, // GPIO_PULL_UP }, // RX
|
||
{ GPIO_P11, GPIO_PULL_UP }, // ADC Vbat
|
||
{ GPIO_P14, GPIO_PULL_DOWN }, // PN8 ?
|
||
{ GPIO_P15, GPIO_PULL_DOWN }, // KEY
|
||
{ GPIO_P18, GPIO_PULL_DOWN }, // PN10 ?
|
||
{ GPIO_P20, GPIO_FLOATING }, // connect to GND
|
||
{ GPIO_P34, GPIO_FLOATING } // connect to +Vbat
|
||
#else
|
||
#error "DEVICE Not released!"
|
||
#endif
|
||
};
|
||
|
||
for (uint8_t i = 0; i < sizeof(ioInit) / sizeof(ioinit_cfg_t); i++) {
|
||
hal_gpio_pull_set(ioInit[i].pin, ioInit[i].type);
|
||
}
|
||
#ifdef GPIO_SPWR
|
||
hal_gpio_write(GPIO_SPWR, 1);
|
||
#endif
|
||
#ifdef GPIO_LED
|
||
hal_gpio_write(GPIO_LED, LED_ON);
|
||
#endif
|
||
//#if SDK_VER_CHIP == __DEF_CHIP_TSOP16__
|
||
DCDC_CONFIG_SETTING(0x0a);
|
||
//#endif
|
||
DCDC_REF_CLK_SETTING(1);
|
||
DIG_LDO_CURRENT_SETTING(1);
|
||
#if defined ( __GNUC__ )
|
||
#if 0 // test
|
||
hal_pwrmgr_RAM_retention(RET_SRAM0 | RET_SRAM1 | RET_SRAM2);
|
||
#else
|
||
extern uint32 g_irqstack_top;
|
||
// Check IRQ STACK (1KB) location
|
||
|
||
/*
|
||
if ((uint32_t) &g_irqstack_top > 0x1fffc000) {
|
||
hal_pwrmgr_RAM_retention(RET_SRAM0 | RET_SRAM1 | RET_SRAM2);
|
||
} else
|
||
*/
|
||
if ((uint32_t) &g_irqstack_top > 0x1fff8000) {
|
||
hal_pwrmgr_RAM_retention(RET_SRAM0 | RET_SRAM1);
|
||
} else {
|
||
hal_pwrmgr_RAM_retention(RET_SRAM0); // RET_SRAM0|RET_SRAM1|RET_SRAM2
|
||
}
|
||
#endif
|
||
#else
|
||
#if DEBUG_INFO || SDK_VER_RELEASE_ID != 0x03010102
|
||
hal_pwrmgr_RAM_retention(RET_SRAM0 | RET_SRAM1); // RET_SRAM0|RET_SRAM1|RET_SRAM2
|
||
#else
|
||
hal_pwrmgr_RAM_retention(RET_SRAM0 | RET_SRAM1); // RET_SRAM0|RET_SRAM1|RET_SRAM2
|
||
#endif
|
||
#endif
|
||
hal_pwrmgr_RAM_retention_set();
|
||
subWriteReg(0x4000f014,26,26, 1); // hal_pwrmgr_LowCurrentLdo_enable();
|
||
//hal_pwrmgr_LowCurrentLdo_disable();
|
||
}
|
||
|
||
static void ble_mem_init_config(void) {
|
||
#if 0 // SDK_VER_RELEASE_ID >= 0x030103 ?
|
||
//ll linkmem setup
|
||
extern void ll_osalmem_init(osalMemHdr_t* hdr, uint32 size);
|
||
ll_osalmem_init((osalMemHdr_t*)g_llLinkHeap, LL_LINK_HEAP_SIZE);
|
||
#endif
|
||
osal_mem_set_heap((osalMemHdr_t*) g_largeHeap, LARGE_HEAP_SIZE);
|
||
LL_InitConnectContext(pConnContext, g_pConnectionBuffer,
|
||
BLE_MAX_ALLOW_CONNECTION,
|
||
BLE_MAX_ALLOW_PKT_PER_EVENT_TX,
|
||
BLE_MAX_ALLOW_PKT_PER_EVENT_RX,
|
||
BLE_PKT_VERSION);
|
||
#if ( MAX_CONNECTION_SLAVE_NUM > 0 )
|
||
static ALIGN4_U8 g_llDevList[BLE_CONN_LL_DEV_LIST_SIZE];
|
||
ll_multi_conn_llDevList_Init(g_llDevList);
|
||
#endif
|
||
|
||
#if MAX_NUM_LL_CONN > 1
|
||
Host_InitContext( MAX_NUM_LL_CONN,
|
||
glinkDB,glinkCBs,
|
||
smPairingParam,
|
||
gMTU_Size,
|
||
gAuthenLink,
|
||
l2capReassembleBuf,l2capSegmentBuf,
|
||
gattClientInfo,
|
||
gattServerInfo);
|
||
#endif
|
||
#ifdef BLE_SUPPORT_CTE_IQ_SAMPLE
|
||
LL_EXT_Init_IQ_pBuff(g_llCteSampleI,g_llCteSampleQ);
|
||
#endif
|
||
}
|
||
|
||
static void hal_rfphy_init(void) {
|
||
//Watchdog_Init(NULL);
|
||
//============config the txPower
|
||
g_rfPhyTxPower = RF_PHY_TX_POWER_0DBM;
|
||
//============config BLE_PHY TYPE
|
||
g_rfPhyPktFmt = PKT_FMT_BLE1M;
|
||
//============config RF Frequency Offset
|
||
g_rfPhyFreqOffSet = RF_PHY_FREQ_FOFF_00KHZ; // hal_rfPhyFreqOff_Set();
|
||
//============config xtal 16M cap
|
||
XTAL16M_CAP_SETTING(0x09); // hal_xtal16m_cap_Set();
|
||
XTAL16M_CURRENT_SETTING(0x01);
|
||
|
||
hal_rc32k_clk_tracking_init();
|
||
{ /* замена hal_rom_boot_init() */
|
||
extern void efuse_init(void);
|
||
efuse_init();
|
||
typedef void (*my_function)(void);
|
||
my_function pFunc = (my_function)(0xa2e1);
|
||
//ble_main();
|
||
pFunc();
|
||
}
|
||
NVIC_SetPriority((IRQn_Type) BB_IRQn, IRQ_PRIO_REALTIME);
|
||
NVIC_SetPriority((IRQn_Type) TIM1_IRQn, IRQ_PRIO_HIGH); //ll_EVT
|
||
NVIC_SetPriority((IRQn_Type) TIM2_IRQn, IRQ_PRIO_HIGH); //OSAL_TICK
|
||
NVIC_SetPriority((IRQn_Type) TIM4_IRQn, IRQ_PRIO_HIGH); //LL_EXA_ADV
|
||
//ble memory init and config
|
||
ble_mem_init_config();
|
||
}
|
||
|
||
static void hal_init(void) {
|
||
hal_low_power_io_init();
|
||
clk_init(g_system_clk); //system init
|
||
hal_rtc_clock_config((CLK32K_e) g_clk32K_config);
|
||
hal_pwrmgr_init();
|
||
// g_system_clk, SYS_CLK_DLL_64M, SYS_CLK_RC_32M / XFRD_FCMD_READ_QUAD, XFRD_FCMD_READ_DUAL
|
||
hal_spif_cache_init(SYS_CLK_DLL_64M, XFRD_FCMD_READ_DUAL);
|
||
hal_gpio_init();
|
||
LOG_INIT();
|
||
hal_adc_init();
|
||
}
|
||
|
||
/////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
int main(void) {
|
||
g_system_clk = SYS_CLK_XTAL_16M; // SYS_CLK_XTAL_16M, SYS_CLK_DBL_32M, SYS_CLK_DLL_64M
|
||
g_clk32K_config = CLK_32K_RCOSC; // CLK_32K_XTAL, CLK_32K_RCOSC
|
||
|
||
#if 0 // defined ( __GNUC__ ) // -> *.ld
|
||
extern const uint32_t *const jump_table_base[];
|
||
memcpy((void*) 0x1fff0000, (void*) jump_table_base, 1024);
|
||
#endif
|
||
wrk.boot_flg = (uint8_t)read_reg(OTA_MODE_SELECT_REG);
|
||
#if defined(OTA_TYPE) && OTA_TYPE == OTA_TYPE_BOOT
|
||
#if (DEV_SERVICES & (SERVICE_KEY | SERVICE_BUTTON))
|
||
hal_gpio_pin_init(GPIO_KEY, GPIO_INPUT);
|
||
if (hal_gpio_read(GPIO_KEY) == KEY_PRESSED
|
||
|| wrk.boot_flg == BOOT_FLG_OTA
|
||
|| wrk.boot_flg == BOOT_FLG_FW0) {
|
||
#else
|
||
if (wrk.boot_flg == BOOT_FLG_OTA
|
||
|| wrk.boot_flg == BOOT_FLG_FW0) {
|
||
#endif
|
||
write_reg(OTA_MODE_SELECT_REG,0);
|
||
} else { // boot FW OTA
|
||
spif_config(SYS_CLK_DLL_64M, 1, XFRD_FCMD_READ_DUAL, 0, 0);
|
||
AP_PCR->CACHE_BYPASS = 1; // just bypass cache
|
||
startup_app();
|
||
}
|
||
#endif // OTA_TYPE == OTA_TYPE_BOOT
|
||
|
||
#if CFG_SLEEP_MODE == PWR_MODE_SLEEP
|
||
watchdog_config(WDG_32S);
|
||
#endif
|
||
|
||
// spif_config(SYS_CLK_DLL_64M, 1, XFRD_FCMD_READ_DUAL, 0, 0);
|
||
|
||
#if (FLASH_PROTECT_FEATURE == 1)
|
||
#if SDK_VER_RELEASE_ID == 0x03010102
|
||
hal_flash_lock();
|
||
#else
|
||
hal_flash_enable_lock(MAIN_INIT);
|
||
#endif
|
||
#endif
|
||
drv_irq_init();
|
||
init_config();
|
||
#if ( HOST_CONFIG & OBSERVER_CFG )
|
||
extern void ll_patch_advscan(void);
|
||
// ll_patch_advscan();
|
||
#else
|
||
extern void ll_patch_slave(void);
|
||
ll_patch_slave();
|
||
// extern void ll_patch_master(void);
|
||
// ll_patch_master();
|
||
#endif
|
||
|
||
hal_rfphy_init();
|
||
hal_init();
|
||
|
||
restore_utc_time_sec();
|
||
#if 0 //def STACK_MAX_SRAM
|
||
extern uint32 g_stack;
|
||
__set_MSP((uint32_t)(&g_stack));
|
||
#endif
|
||
load_eep_config();
|
||
|
||
LOG("SDK Version ID %08x \n",SDK_VER_RELEASE_ID);
|
||
LOG("rfClk %d rcClk %d sysClk %d tpCap[%02x %02x]\n",g_rfPhyClkSel,g_clk32K_config,g_system_clk,g_rfPhyTpCal0,g_rfPhyTpCal1);
|
||
LOG("sizeof(struct ll_pkt_desc) = %d, buf size = %d\n", sizeof(struct ll_pkt_desc), BLE_CONN_BUF_SIZE);
|
||
LOG("sizeof(g_pConnectionBuffer) = %d, sizeof(pConnContext) = %d, sizeof(largeHeap)=%d \n",
|
||
sizeof(g_pConnectionBuffer), sizeof(pConnContext),sizeof(g_largeHeap)); LOG("[REST CAUSE] %d\n ",g_system_reset_cause);
|
||
app_main(); // No Return from here
|
||
|
||
return 0;
|
||
}
|
||
|
||
|