From 035ecb85c3513be2b6ab5c515db082cb7fee8f97 Mon Sep 17 00:00:00 2001
From: WXK <287788329@qq.com>
Date: 星期四, 22 五月 2025 18:11:06 +0800
Subject: [PATCH] 修改bug,io改为不拉

---
 01_SDK/nimble/os/freertos/portable/RVDS/ARM_CM0/pan107x/os_setup.c |  684 ++++++++------------------------------------------------
 1 files changed, 100 insertions(+), 584 deletions(-)

diff --git a/01_SDK/nimble/os/freertos/portable/RVDS/ARM_CM0/pan107x/os_setup.c b/01_SDK/nimble/os/freertos/portable/RVDS/ARM_CM0/pan107x/os_setup.c
index db749c2..e67176c 100644
--- a/01_SDK/nimble/os/freertos/portable/RVDS/ARM_CM0/pan107x/os_setup.c
+++ b/01_SDK/nimble/os/freertos/portable/RVDS/ARM_CM0/pan107x/os_setup.c
@@ -1,619 +1,135 @@
 #include "FreeRTOS.h"
 #include "task.h"
-#ifdef NIMBLE_SPARK_SUP
-#include "app_config_spark.h"
-#endif
+#include "timers.h"
+#include "ble_config.h"
 #include "pan_clktrim.h"
-#include "nimble/nimble_port.h"
-#include "pan_svc_call.h"
-#ifdef NIMBLE_SPARK_SUP
-#include "nimble/pan107x/nimble_glue_spark.h"
-#endif
 #include "pan_power.h"
-
-/* For RCL Clock test */
-//#define PRINT_RCL_FREQ_BEFORE_AND_AFTER_CALIBRATE
-
-#define CLK_ACT32K_TMR_EN_Pos   			(0)                                         
-#define CLK_ACT32K_TMR_EN_Msk   			(0x1ul << CLK_ACT32K_TMR_EN_Pos)
-#define CLK_ACT32K_LL_32KCLK_SEL_Pos   		(1)                                         
-#define CLK_ACT32K_LL_32KCLK_SEL_Msk   		(0x1ul << CLK_ACT32K_LL_32KCLK_SEL_Pos)
-
-/* Do not modify this definition */
-#define LPTMR_CURR_CNT_ENA_REG  (0x5002000C)
-
-extern uint32_t lp_int_ctrl_reg;
-extern uint32_t rst_status_reg;
-extern void app_main(void);
-
-static uint8_t m_chip_mac[6];
-
-#if (CONFIG_LOW_SPEED_CLOCK_SRC == 1)
-uint32_t clk_32k_count = 32768;	
-#else
-uint32_t clk_32k_count = 32000;
+#if BLE_EN
+#include "pan_ble.h"
 #endif
+#if CONFIG_RTT_LOG_ENABLE
+#include "SEGGER_RTT.h"
+#endif
+#include "app_log.h"
+#include "soc_api.h"
+#include "utility.h"
+
+/*******************************************************************************
+ * Macro
+ ******************************************************************************/
+
+
+/*******************************************************************************
+ * Variable Define & Declaration
+ ******************************************************************************/
+
+
+/*******************************************************************************
+ * Function Declaration
+ ******************************************************************************/
+
+
+/*******************************************************************************
+ * Function Define
+ ******************************************************************************/
+#if CONFIG_OS_EN
 
 #if CONFIG_AUTO_OPTIMIZE_POWER_PARAM
-
 #define TEMP_CHECK_INTERVAL_MS      (CONFIG_TEMP_SAMPLE_INTERVAL_S*1000)
 
-#ifdef NIMBLE_SPARK_SUP
-static struct ble_npl_callout temp_check_timer;
+static TimerHandle_t temp_check_timer;
 static ADC_HandleTypeDef adc_temperature = {
-	.id = ADC_CH_TEMP,
+    .id = ADC_CH_TEMP,
 };
-#endif
+
+void temp_check_cb(TimerHandle_t xtimer)
+{
+    float temp;
+
+    //printf("[W] temp_check_cb\r\n");
+
+    if (HAL_ADC_GetValue(&adc_temperature, &temp) == HAL_SUCCESS) {
+        PW_AutoOptimizeParams((int)temp);
+
+    #if BLE_EN
+        /* Update SCA */
+        static uint8_t config = 0xFF;
+        uint16_t SCA = CONFIG_BT_CTLR_SCA;
+        if(temp > 15 && temp < 30){
+            if(config == 0)
+                return;
+            config = 0;
+            SCA = CONFIG_BT_CTLR_SCA;
+        }
+        else{
+            if(config == 1)
+                return;
+            config = 1;
+            SCA = (CONFIG_LOW_SPEED_CLOCK_SRC==0 ? 1000:500);
+        }
+        pan_misc_upd_local_sca(SCA);
+
+        //printf("update SCA:%d\n", SCA);
+    #endif
+    }
+}
 
 void temp_check_start(uint32_t ms)
 {
-#ifdef NIMBLE_SPARK_SUP
-    ble_npl_callout_reset(&temp_check_timer, pdMS_TO_TICKS(ms));
-#endif
-}
+    (void)ms;
 
-void temp_check_cb(struct ble_npl_event *e)
-{
-#ifdef NIMBLE_SPARK_SUP
-	float temp;
-	
-    temp_check_start(TEMP_CHECK_INTERVAL_MS);
-
-	if (HAL_ADC_GetValue(&adc_temperature, &temp) == PAN_HAL_SUCCESS)
-		PW_AutoOptimizeParams((int)temp);
-#endif
-}
-
-void temp_check_init(void)
-{
-#ifdef NIMBLE_SPARK_SUP
-	//register timer
-	ble_npl_callout_init(&temp_check_timer, (struct ble_npl_eventq *)nimble_port_get_dflt_eventq(), temp_check_cb, NULL);
-
-	//start timer
-	temp_check_start(1000);
-#endif
+    if(temp_check_timer){
+        xTimerStart(temp_check_timer, 0);
+    }
 }
 
 void temp_check_stop(void)
 {
-#ifdef NIMBLE_SPARK_SUP
-    ble_npl_callout_stop(&temp_check_timer);
-#endif
+    if(temp_check_timer){
+        xTimerStop(temp_check_timer, 0);
+    }
 }
 
+void temp_check_init(void)
+{
+    temp_check_timer = xTimerCreate("pwr_param_upd_timer", pdMS_TO_TICKS(TEMP_CHECK_INTERVAL_MS), pdTRUE, NULL, temp_check_cb);
+    if(temp_check_timer == NULL){
+        printf("[E] %s %d temp check timer create failed\n", __FILE__, __LINE__);
+    }
+    temp_check_start(0);
+}
 #endif /* CONFIG_AUTO_OPTIMIZE_POWER_PARAM */
 
 
-#define DST_CLK_CNT     100     /* measure 100 rcl clock period, time spend about 50ms+ */
+TaskHandle_t main_task_h;
 
-#if ((CONFIG_LOW_SPEED_CLOCK_SRC == 0) || (CONFIG_LOW_SPEED_CLOCK_SRC == 1))
-static uint32_t clktrim_measure_32k_clk(uint32_t dst_clk_cnt)
+void main_task(void *p)
 {
-    uint32_t counter_result;
-    uint32_t calib_freq;
-
-    CLK_EnableClkTrim(ENABLE);
-    CLK_SelectClkTrimSrc(CLKTRIM_CALC_CLK_SEL_32K);
-
-    TRIM_SetCalCnt(TRIM, dst_clk_cnt);
-
-    TRIM_StartTuning(TRIM, TRIM_MEASURE_TUNING_EN_Msk);
-    while (!TRIM_IsIntStatusOccured(TRIM, TRIM_FLAG_MEASURE_STOP_Msk)) {
-        /* busy-wait */
-    }
-    TRIM_ClearIntStatusMsk(TRIM, TRIM_FLAG_MEASURE_STOP_Msk);
-    counter_result = TRIM_GetRealCnt(TRIM);
-
-    calib_freq = ((uint64_t)FREQ_32MHZ * (uint64_t)dst_clk_cnt) / counter_result;
-	clk_32k_count = calib_freq;
-    CLK_EnableClkTrim(DISABLE);
-
-    return calib_freq;
-}
-#endif
-
-#if (CONFIG_FORCE_CALIB_RCL_CLK && (CONFIG_LOW_SPEED_CLOCK_SRC == 0))
-static void calibrate_rcl_clk(uint32_t expected_freq)
-{
-    uint32_t AHB_clk_reg;
-
-    const uint8_t coarse_tune_bitwidth = 3;
-    const uint8_t fine_tune_bitwidth = 7;
-
-    AHB_clk_reg = CLK->AHB_CLK_CTRL;
-    CLK->AHB_CLK_CTRL |= CLK_AHBPeriph_APB2;
-
-    TRIM_EnableInt(TRIM, ENABLE);
-
-    /* Start calibration */
-    /* Disable hardware calculate. */
-    ANA->RCL_HW_CAL_CTRL &= ~ANAC_RCL_HW_CAL_EN_Msk;
-    /* Enable Clktrim */
-    CLK_SelectClkTrimSrc(CLKTRIM_CALC_CLK_SEL_32K);
-    CLK_EnableClkTrim(ENABLE);
-
-    TRIM_SetCalCnt(TRIM, DST_CLK_CNT);
-    TRIM_SetIdealCnt(TRIM, FREQ_32MHZ / expected_freq * DST_CLK_CNT - 1);
-
-    /* a. Coarse tuning proc */
-    TRIM_SetBitWidth(TRIM, coarse_tune_bitwidth);
-    TRIM_SetCoarseCode(TRIM, 1 << coarse_tune_bitwidth);
-    TRIM_StartTuning(TRIM, TRIM_COARSE_TUNING_EN_Msk);
-    while (!TRIM_IsIntStatusOccured(TRIM, TRIM_FLAG_CTUNE_STOP_Msk)) {
-        /* busy-wait */
-    }
-    TRIM_ClearIntStatusMsk(TRIM, TRIM_FLAG_CTUNE_STOP_Msk);
-
-    /* b. Fine tuning proc */
-    TRIM_SetBitWidth(TRIM, fine_tune_bitwidth);
-    TRIM_SetFineCode(TRIM, 1 << fine_tune_bitwidth);
-    TRIM_StartTuning(TRIM, TRIM_FINE_TUNING_EN_Msk);
-    while (!TRIM_IsIntStatusOccured(TRIM, TRIM_FLAG_FTUNE_STOP_Msk)) {
-        /* busy-wait */
-    }
-    TRIM_ClearIntStatusMsk(TRIM, TRIM_FLAG_FTUNE_STOP_Msk);
-
-    /* Disable Clktrim */
-    CLK_EnableClkTrim(DISABLE);
-
-    CLK->AHB_CLK_CTRL = AHB_clk_reg;
-}
-#endif /* CONFIG_FORCE_CALIB_RCL_CLK */
-
-#if CONFIG_LOG_ENABLE
-void debug_uart_init(void)
-{
-    /* Unlock protected registers */
-    SYS_UnlockReg();
-
-    CLK_APB1PeriphClockCmd(CLK_APB1Periph_UART0, ENABLE);
-    
-#ifdef IP_101x
-    /* Init I/O Multi-function  */
-    SYS_SET_MFP(P1, 1, UART0_TX);
-    SYS_SET_MFP(P1, 2, UART0_RX);
-    GPIO_EnableDigitalPath(P1, BIT2);
-#else
-    /* Init I/O Multi-function  */
-    SYS_SET_MFP(P1, 6, UART0_TX);
-    SYS_SET_MFP(P1, 7, UART0_RX);
-    GPIO_EnableDigitalPath(P1, BIT7);
-#endif
-
-    /* Relock protected registers */
-//    SYS_LockReg();
-
-    UART_InitTypeDef Init_Struct;
-
-    Init_Struct.UART_BaudRate = 921600;
-
-    #ifdef CONFIG_APP_REDEFINE_BAUDRATE
-    Init_Struct.UART_BaudRate = CONFIG_APP_REDEFINE_BAUDRATE;
-    #endif
-
-    Init_Struct.UART_LineCtrl = Uart_Line_8n1;
-
-    /* Init UART0 for printf */
-    UART_Init(UART0, &Init_Struct);
-    UART_EnableFifo(UART0);
-}
-#endif //CONFIG_LOG_ENABLE
-
-void track_pin_init(void)
-{
-#ifdef NIMBLE_SPARK_SUP
-	CLK_AHBPeriphClockCmd(CLK_AHBPeriph_GPIO, ENABLE);
-	
-	debug_io_map debug_io;
-
-  #if 1 //32 pin
-	GPIO_SetMode(P1, BIT5, GPIO_MODE_OUTPUT); P15 = 0;
-	GPIO_SetMode(P1, BIT3, GPIO_MODE_OUTPUT); P13 = 0;
-	GPIO_SetMode(P1, BIT4, GPIO_MODE_OUTPUT); P14 = 0;
-	GPIO_SetMode(P1, BIT2, GPIO_MODE_OUTPUT); P12 = 0;
-	GPIO_SetMode(P0, BIT5, GPIO_MODE_OUTPUT); P05 = 0;
-	GPIO_SetMode(P0, BIT3, GPIO_MODE_OUTPUT); P03 = 0;
-	GPIO_SetMode(P2, BIT3, GPIO_MODE_OUTPUT); P23 = 0;
-	
-	debug_io.scan_pin      = (uint32_t)&P15;
-	debug_io.adv_pin       = (uint32_t)&P13;
-	debug_io.timer_irq_pin = (uint32_t)&P14;
-	debug_io.ll_irq_pin    = (uint32_t)&P12;
-	debug_io.conn_pin[0]   = (uint32_t)&P05;
-	debug_io.conn_pin[1]   = (uint32_t)&P03;
-	debug_io.sch_pin       = (uint32_t)&P23;
-	
-  #else
-	GPIO_SetMode(P2, BIT2, GPIO_MODE_OUTPUT); P22 = 0;
-	GPIO_SetMode(P2, BIT4, GPIO_MODE_OUTPUT); P24 = 0;
-	GPIO_SetMode(P2, BIT5, GPIO_MODE_OUTPUT); P25 = 0;
-	GPIO_SetMode(P0, BIT3, GPIO_MODE_OUTPUT); P03 = 0;
-	GPIO_SetMode(P2, BIT6, GPIO_MODE_OUTPUT); P26 = 0;
-	GPIO_SetMode(P1, BIT2, GPIO_MODE_OUTPUT); P12 = 0;
-	GPIO_SetMode(P1, BIT1, GPIO_MODE_OUTPUT); P11 = 0;
-	GPIO_SetMode(P1, BIT5, GPIO_MODE_OUTPUT); P15 = 0;
-	
-	debug_io.scan_pin      = (uint32_t)&P22;
-	debug_io.adv_pin       = (uint32_t)&P24;
-	debug_io.timer_irq_pin = (uint32_t)&P25;
-	debug_io.ll_irq_pin    = (uint32_t)&P03;
-	debug_io.conn_pin[0]   = (uint32_t)&P26;
-	debug_io.conn_pin[1]   = (uint32_t)&P12;
-	debug_io.sch_pin       = (uint32_t)&P15;
-  #endif
-
-	pan_svc_interface(SVC_LL_DEBUG, &debug_io);
-#endif
-}
-
-__weak void vPortSystemClockEnable()
-{
-    /* User overload, self - realization clock enable and disable */
-}
-
-void sys_clock_Init(void)
-{
-    /* Unlock protected registers */
-    SYS_UnlockReg();
-    
-    ANA->LP_FSYN_LDO |= 0X1;
-
-	CLK_XthStartupConfig();
-    CLK->XTH_CTRL |= CLK_XTHCTL_XTH_EN_Msk;
-	CLK_WaitClockReady(CLK_SYS_SRCSEL_XTH);
-	
-#if (CONFIG_SYSTEM_CLOCK == 32)
-	CLK_HCLKConfig(1);
-	CLK_SYSCLKConfig(CLK_DPLL_REF_CLKSEL_XTH, CLK_DPLL_OUT_64M); 
-#elif (CONFIG_SYSTEM_CLOCK == 48)
-	CLK_HCLKConfig(0);
-	CLK_SYSCLKConfig(CLK_DPLL_REF_CLKSEL_XTH, CLK_DPLL_OUT_48M); 
-#endif
-	CLK_RefClkSrcConfig(CLK_SYS_SRCSEL_DPLL);
-
-	CLK->RCH_CTRL &= ~BIT(0);
-
-    CLK_PCLK1Config(CONFIG_PERIPH_DIVIDE / 2);
-    CLK_PCLK2Config(CONFIG_PERIPH_DIVIDE / 2);
-    /*
-	 * Note that all clocks on APB are disabled by default after SoC power up, and
-	 * the default AHB clocks enabled after SoC power up are:
-	 * ACC/eFuse/ROM/RCC_AHB/Systick/GPIO.
-	 * Here we disable ACC, eFuse and ROM clock as these modules are not commonly
-	 * used. We should re-enabled them once we use later.
-	 * Here We also enable APB1 and APB2 clock path to make sure modules on APB can
-	 * be easily enabled by each peripheral driver by enabling their clock enable
-	 * bits on APB bus.
-	 */
-	CLK_AHBPeriphClockCmd(CLK_AHBPeriph_ROM, DISABLE);
-	CLK_AHBPeriphClockCmd(CLK_AHBPeriph_APB1 | CLK_AHBPeriph_APB2, ENABLE);
-	  
-    /*Basic clock for BLE*/
-    CLK_AHBPeriphClockCmd(CLK_AHBPeriph_BLE_32M | CLK_AHBPeriph_BLE_32K, ENABLE);
-	
-	CLK_AHBPeriphClockCmd(CLK_AHBPeriph_USB_AHB|CLK_AHBPeriph_USB_48M, DISABLE);
-
-    vPortSystemClockEnable();
-}
-
-void ble_misc_init(void)
-{
-#ifdef NIMBLE_SPARK_SUP
-    NVIC_EnableIRQ(LL_IRQn);
-    NVIC_SetPriority(LL_IRQn, 0);
-
-    NVIC_EnableIRQ(BLE_EVENT_PROC_IRQn);
-    NVIC_SetPriority(BLE_EVENT_PROC_IRQn, 1);
-#endif
-}
-
-
-static int pan10xx_hw_calib_init(void)
-{
-	OTP_STRUCT_T otp;
-	
-    printf("Try to load HW calibration data..");
-    if (!SystemHwParamLoader(&otp)) {
-        printf("\nWARNING: Cannot find valid calib data in current chip!\n");
-    } else {
-        printf(" DONE.\n");
-        printf("- Chip Info         : 0x%x\n", otp.m.chip_info);
-        printf("- Chip CP Version   : %d\n", otp.m.cp_version);
-        printf("- Chip FT Version   : %d\n", otp.m.ft_version);
-        if (otp.m.ft_version >= 2) {
-			memcpy(m_chip_mac, otp.m_v2.mac_addr, 6);
-			printf("- Chip MAC Address  : %02X%02X%02X%02X%02X%02X\n", otp.m_v2.mac_addr[0], otp.m_v2.mac_addr[1],
-				otp.m_v2.mac_addr[2], otp.m_v2.mac_addr[3], otp.m_v2.mac_addr[4], otp.m_v2.mac_addr[5]);
-		} else {
-			memcpy(m_chip_mac, otp.m.mac_addr, 6);
-			printf("- Chip MAC Address  : %02X%02X%02X%02X%02X%02X\n", otp.m.mac_addr[0], otp.m.mac_addr[1],
-				otp.m.mac_addr[2], otp.m.mac_addr[3], otp.m.mac_addr[4], otp.m.mac_addr[5]);
-		}
-        printf("- Chip UID          : %02X%02X%02X%02X%02X%02X%02X%02X%02X\n", otp.m.uid[0], otp.m.uid[1],
-            otp.m.uid[2], otp.m.uid[3], otp.m.uid[4], otp.m.uid[5], otp.m.uid[6], otp.m.uid[7], otp.m.uid[8]);
-	
-		//buck out(DCDC):default - 2; default:8
-		uint32_t tmp = ANA->LP_BUCK_3V; 
-		tmp &= ~(0xFul<<2);
-		tmp |= (((otp.m.buck_out_trim >> 1) - 2) << 2);
-		ANA->LP_BUCK_3V = tmp;
-				
-	#if CONFIG_DVDD_VOL_OPTIMIZE_EN		
-		//HPLDO(DVDD) default - 1/2; default:8
-		tmp = ANA->LP_HP_LDO;
-		tmp &= ~(0xFul <<3);
-		tmp |= ((otp.m.hp_ldo_trim - 2)<<3); //~1.12V
-		ANA->LP_HP_LDO = tmp;
-	#else
-		//HPLDO(DVDD) default - 1/2; default:8
-		tmp = ANA->LP_HP_LDO;
-		tmp &= ~(0xFul <<3);
-		tmp |= ((otp.m.hp_ldo_trim - 1)<<3); //~1.16V
-		ANA->LP_HP_LDO = tmp;
-	#endif
-    }
-    printf("- Chip Flash UID    : ");
-    for (uint32_t i = 0; i < 16; i++) {
-        printf("%02X", flash_ids.uid[i]);
-    }
-    printf("\n- Chip Flash Size   : %ld KB\n", BIT(flash_ids.memory_density_id) >> 10);
-
-#if CONFIG_SOC_INCREASE_LPLDOH_CALIB_CODE
-    /* Temporarily get and increase LPLDOH calibrate code */
-    uint32_t i = ((ANA->LP_LP_LDO_3V & (0xFu << 17)) >> 17) + CONFIG_SOC_INCREASE_LPLDOH_CALIB_CODE;
-    /* Handle code overflow */
-    if (i > 15) {
-        i = 15;
-    }
-    ANA->LP_LP_LDO_3V = (ANA->LP_LP_LDO_3V & ~(0xFu << 17)) | (i << 17);
-#endif /* CONFIG_SOC_INCREASE_LPLDOH_CALIB_CODE */
-
-    return 0;
-}
-
-uint8_t pan10x_mac_addr_get(uint8_t *mac)
-{
-	uint8_t addr_null[6] = {0, 0, 0, 0, 0, 0};
-	
-	if (memcmp(m_chip_mac, addr_null, 6) == 0) {
-		return 1;
-	} else {
-		memcpy(mac, m_chip_mac, 6);
-		return 0;
-	}
-}
-
-void pan10x_init()
-{
-#if CONFIG_RF_CALIB
-    CLK->XTH_CTRL = (CLK->XTH_CTRL & ~CLK_XTHCTL_XO_CAP_SEL_Msk) | (0x16 << CLK_XTHCTL_XO_CAP_SEL_Pos);
-#endif
-
-#if CONFIG_VECTOR_REMAP_TO_RAM
-    static ALIGN(256) uint32_t ram_vector[64] = {0};
-    extern uint32_t __Vectors;
-    memcpy((void*)ram_vector, &__Vectors, 256);
-    ANA->CPU_ADDR_REMAP_CTRL = ((uint32_t)ram_vector >> 8) | BIT(31);
-#endif /* CONFIG_VECTOR_REMAP_TO_RAM */
-
-    pan10xx_hw_calib_init();
-
-#if CONFIG_FLASH_LDO_EN
-#if CONFIG_FLASH_LDO_VOL < 8
-    ANA->LP_HP_LDO &= ~(BIT(22)|BIT(21)|BIT(20));
-    ANA->LP_HP_LDO |= (CONFIG_FLASH_LDO_VOL<<20);
-#endif /* CONFIG_FLASH_LDO_VOL */
-    ANA->LP_HP_LDO &= ~ANAC_HPLDO_FLASHLDO_BP_Msk_3v;
-#else
-    ANA->LP_HP_LDO |= ANAC_HPLDO_FLASHLDO_BP_Msk_3v;
-#endif /* CONFIG_FLASH_LDO_EN */
-
-    // Ensure SoC LP configure is sleep mode (default state)
-    SCB->SCR &= ~SCB_SCR_SLEEPDEEP_Msk;
-    LP_SetSleepMode(ANA, LP_MODE_SEL_SLEEP_MODE);
-
-#if (CONFIG_LOW_SPEED_CLOCK_SRC == 0)  /*LP Clock from RCL, 32000 HZ default*/
-    /* Enable RCL */
-    CLK->RCL_CTRL_3V |= CLK_RCLCTL_RC32K_EN_Msk_3v;
-    /* Wait for stable */
-    while (!(CLK->RCL_CTRL_3V & CLK_STABLE_STATUS_Msk));
-    /* Select RCL as SoC 32K clock source */
-    CLK->CLK_TOP_CTRL_3V &= ~CLK_TOPCTL_32K_CLK_SEL_Msk_3v;
-    /* Disable lp xtl src */
-    ANA->LP_FL_CTRL_3V &= ~ANAC_FL_XTAL32K_EN_Msk_3v;
-    ANA->LP_FL_CTRL_3V |= ANAC_FL_RC32K_EN_Msk_3v;
-    /* Delay more than two 32K clock cycles */
-    SYS_delay_10nop(250);
-    /* Disable XTL */
-    CLK->XTL_CTRL_3V &= ~CLK_XTLCTL_XTL_EN_Msk_3v;
-#if CONFIG_FORCE_CALIB_RCL_CLK
-#ifdef PRINT_RCL_FREQ_BEFORE_AND_AFTER_CALIBRATE
-    printf("RCL Freq before calib: %d Hz\n", clktrim_measure_32k_clk(DST_CLK_CNT));
-#endif
-    /* Calibrate RCL to 32K Hz */
-    calibrate_rcl_clk(32000);
-#ifdef PRINT_RCL_FREQ_BEFORE_AND_AFTER_CALIBRATE
-    printf("RCL Freq after calib: %d Hz\n", clktrim_measure_32k_clk(DST_CLK_CNT));
-#endif
-#endif /* CONFIG_FORCE_CALIB_RCL_CLK */
-#elif ( CONFIG_LOW_SPEED_CLOCK_SRC == 2)  /*LP Clock from ACT32K,32000 HZ default*/
-	ANA->ACT_32K_CTRL |= (CLK_ACT32K_TMR_EN_Msk | CLK_ACT32K_LL_32KCLK_SEL_Msk);  /*LP Clock from XTL,32768 HZ default*/
-#else /*LP Clock from XTL, 32768 HZ */
-#ifdef XTL_SLOW_SETUP
-    /* Enable XTL clock */
-    CLK->XTL_CTRL_3V |= CLK_XTLCTL_XTL_EN_Msk_3v;
-    while(!(CLK->XTL_CTRL_3V & CLK_XTLCTL_STABLE_Msk));
-#else // Quick Setup
-    CLK->MEAS_CLK_CTRL = (CLK->MEAS_CLK_CTRL & ~(CLK_MEASCLK_XTH_DIV_Msk)) | (0x1e8 << CLK_MEASCLK_XTH_DIV_Pos);
-    CLK->XTL_CTRL_3V = (CLK->XTL_CTRL_3V & ~(CLK_XTLCTL_DELAY_Msk_3v)) | (3 << CLK_XTLCTL_DELAY_Pos_3v);
-    /* Enable quick startup */
-    CLK->MEAS_CLK_CTRL |= CLK_MEASCLK_XTL_QUICK_EN_Msk;
-    SYS_SET_MFP(P2, 0, XTL_C1_CLK);
-    SYS_SET_MFP(P2, 1, XTL_C2_CLK);
-    /* Enable XTL clock */
-    CLK->XTL_CTRL_3V |= CLK_XTLCTL_XTL_EN_Msk_3v;
-    /* Delay a while */
-    SYS_delay_10nop(5000);
-    /* Disable quick startup */
-    CLK->MEAS_CLK_CTRL &= ~CLK_MEASCLK_XTL_QUICK_EN_Msk;
-    SYS_SET_MFP(P2, 0, GPIO);
-    SYS_SET_MFP(P2, 1, GPIO);
-    /* Wait for stable */
-    while (!(CLK->XTL_CTRL_3V & CLK_STABLE_STATUS_Msk)) {
-        /* Busy wait */
-        __NOP();
-    }
-#endif /* XTL_SLOW_SETUP */
-    /* Select XTL as current 32K clock */
-    CLK->CLK_TOP_CTRL_3V |= CLK_TOPCTL_32K_CLK_SEL_Msk_3v;
-    /* Delay more than two 32K clock cycles */
-    SYS_delay_10nop(250);
-    /* Disable lp rcl src */
-    ANA->LP_FL_CTRL_3V |= ANAC_FL_XTAL32K_EN_Msk_3v;
-    ANA->LP_FL_CTRL_3V &= ~ANAC_FL_RC32K_EN_Msk_3v;
-    /* Disable RCL clock */
-    CLK->RCL_CTRL_3V &= ~BIT(0);
-#endif /* CONFIG_LOW_SPEED_CLOCK_SRC */
-
-    /* Store value in rst status reg and lp int ctrl reg for later possible soc_reset_reason_get() use */
-    rst_status_reg = CLK->RSTSTS;
-    lp_int_ctrl_reg = ANA->LP_INT_CTRL;
-    /* Clear status registers for next time detecting */
-    CLK->RSTSTS = CLK->RSTSTS;
-    ANA->LP_INT_CTRL = ANA->LP_INT_CTRL;
-
-    /* Enable lp timer counter */
-    ANA->LP_FL_CTRL_3V |= ANAC_FL_SLEEP_CNT_EN_Msk;
-    (*(volatile uint32_t *)LPTMR_CURR_CNT_ENA_REG) |= BIT1;
-
-    /* Enable ble related irqs, etc. */
-    ble_misc_init();
-}
-
-void setup_thread(void *param)
-{
-    app_main();
-}
-
-CONFIG_RAM_CODE void soc_busy_wait(uint32_t us)
-{
-    while (us--) {
-        for (int32_t cnt = SystemCoreClock; cnt > 0; cnt-= 16000000u) {
-            __NOP();
-        }
-    }
-}
-
-void __WEAK app_init_early(void)
-{
-	return;
-}
-
-int main()
-{
-    /* system clock initialize */
-    sys_clock_Init();
-
-	/* add a weak function for application initializing early */
-	extern void app_init_early(void);
-	app_init_early();
-
-#if CONFIG_LOG_ENABLE
-    /* log uart initialize */
-    debug_uart_init();
-#endif /* CONFIG_LOG_ENABLE */
-
-	/* Track Init */
-#if CONFIG_BT_CTLR_LINK_LAYER_DEBUG
-	track_pin_init();
-	pan_misc_register_print(vprintf);
-#endif
-
-    /* system configure */
-    pan10x_init();
-
-#if CONFIG_PM
-    /* Init low power flow */
-    extern void deepsleep_init(void);
-    deepsleep_init();
-	
-#endif
-
-#ifdef NIMBLE_SPARK_SUP
-    /* ble stack init*/
-    nimble_port_init();
-#endif
-
 #if CONFIG_AUTO_OPTIMIZE_POWER_PARAM
-#ifdef NIMBLE_SPARK_SUP	
-	if(PW_ParamIsHas()){
-		HAL_ADC_Init(&adc_temperature);
-		temp_check_init();
-	}
-#endif
-#endif
+    if(!PW_ParamExists()) {
+        printf("[E] Optimized power configuration is not found!\n");
+        while(1);
+    }
+    HAL_ADC_Init(&adc_temperature);
+    temp_check_cb(NULL);
+    temp_check_init();
+#endif /* CONFIG_AUTO_OPTIMIZE_POWER_PARAM */
 
-#if ((CONFIG_LOW_SPEED_CLOCK_SRC == 0) || (CONFIG_LOW_SPEED_CLOCK_SRC == 1))
-	/* get clock frequence, no matter rcl or xtl */
-	clktrim_measure_32k_clk(1000);
-#endif
-	
-#if CONFIG_SYSTEM_WATCH_DOG_ENABLE
-	extern void system_watch_dog_init(void);
-	system_watch_dog_init();
-#endif
+    extern int $Super$$main(void);
+    $Super$$main();
 
-    setup_thread(NULL);
+    vTaskDelete(NULL);
+}
 
-    /* The operating system starts scheduling. */
+__NO_RETURN void os_schedule_main(void)
+{
+    xTaskCreate(main_task, "main_task", CONFIG_MAIN_TASK_STACK_SIZE, NULL, CONFIG_MAIN_TASK_PRIO, &main_task_h);
+
+    /* Start OS */
     vTaskStartScheduler();
 
-    printf("\033[31;1m[ERR] This is not where the program should go\n\033[0m");
+    printf("[E] This is not where the program should go\r\n");
     while(1);
 }
 
-#if configUSE_MALLOC_FAILED_HOOK
-void vApplicationMallocFailedHook(void)
-{
-    printf("pvPortMalloc failed\n");
-}
-#endif
-
-#if (CONFIG_LOG_ENABLE == 0)
-void SendChar(int ch)
-{
-}
-
-char GetChar(void)
-{
-    return (char)0;
-}
-#endif
-
-__attribute__((weak,noreturn))
-void __aeabi_assert (const char *expr, const char *file, int line) {
-  char str[12], *p;
-
-  fputs("*** assertion failed: ", stderr);
-  fputs(expr, stderr);
-  fputs(", file ", stderr);
-  fputs(file, stderr);
-  fputs(", line ", stderr);
-
-  p = str + sizeof(str);
-  *--p = '\0';
-  *--p = '\n';
-  while (line > 0) {
-    *--p = '0' + (line % 10);
-    line /= 10;
-  }
-  fputs(p, stderr);
-
-  abort();
-}
-
-__attribute__((weak))
-void abort(void) {
-  for (;;);
-}
+#endif /* CONFIG_OS_EN */

--
Gitblit v1.9.3