diff --git a/gr551x/sdk_liteos/gr551x_sdk/components/libraries/pmu_calibration/pmu_calibration.c b/gr551x/sdk_liteos/gr551x_sdk/components/libraries/pmu_calibration/pmu_calibration.c index aa38806..be5f2ad 100755 --- a/gr551x/sdk_liteos/gr551x_sdk/components/libraries/pmu_calibration/pmu_calibration.c +++ b/gr551x/sdk_liteos/gr551x_sdk/components/libraries/pmu_calibration/pmu_calibration.c @@ -55,59 +55,8 @@ static void system_pmu_calibration_task(void *p_arg); static app_timer_id_t s_pmu_calibration_timer_id = 0; #endif -extern uint32_t g_debug_temperature; - #if CFG_LPCLK_INTERNAL_EN - -#define PMU_SMALL_INTERVAL_MS (10*1000) -#define TEMPERATURN_HIGH 44 -#define TEMPERATURN_LOW 40 -static uint32_t pmu_interval_init = 30 * 1000; -static uint32_t pmu_interval_prev = 0; - -uint32_t pmu_interval_get(uint32_t is_init) -{ - uint32_t interval = 0; - - if (g_debug_temperature > TEMPERATURN_HIGH) { - interval = PMU_SMALL_INTERVAL_MS; - } else if (g_debug_temperature >= TEMPERATURN_LOW && g_debug_temperature <= TEMPERATURN_HIGH && is_init) { - interval = PMU_SMALL_INTERVAL_MS; - } else if (g_debug_temperature < TEMPERATURN_LOW) { - interval = pmu_interval_init; - } - - return interval; -} - -void pmu_timer_handler(void* p_arg) -{ - pmu_calibration_handler(p_arg); - - uint32_t interval_new; - uint32_t interval_diff; - - interval_new = pmu_interval_get(0); - if (interval_new == 0) { - return; - } - - interval_diff = interval_new > pmu_interval_prev ? - interval_new - pmu_interval_prev: pmu_interval_prev - interval_new; - - if (interval_diff > INTERVAL_MIN) { -#ifdef ENV_USE_FREERTOS - portBASE_TYPE xHigherPriorityTaskWoken; - xTimerChangePeriodFromISR(timer_handle, interval_new, &xHigherPriorityTaskWoken); - portYIELD_FROM_ISR(xHigherPriorityTaskWoken); -#else - app_timer_delete(&s_pmu_calibration_timer_id); - app_timer_create(&s_pmu_calibration_timer_id, ATIMER_REPEAT, pmu_timer_handler); - app_timer_start(s_pmu_calibration_timer_id, interval_new, NULL); -#endif - pmu_interval_prev = interval_new; - } -} +#error "INTERNAL LPCLK is not supported by OHOS" #endif /* diff --git a/gr551x/sdk_liteos/gr551x_sdk/toolchain/gr551x/source/platform_gr55xx.c b/gr551x/sdk_liteos/gr551x_sdk/toolchain/gr551x/source/platform_gr55xx.c index 04b19e5..6e4d753 100755 --- a/gr551x/sdk_liteos/gr551x_sdk/toolchain/gr551x/source/platform_gr55xx.c +++ b/gr551x/sdk_liteos/gr551x_sdk/toolchain/gr551x/source/platform_gr55xx.c @@ -57,6 +57,8 @@ // NOTE: SVC #0 is reserved for freertos, DO NOT USE IT! #define SVC_TABLE_NUM_MAX 4 +#define PMU_CALIBRATION_DURATION_MS (30000) + #define FLASH_CS (LL_GPIO_PIN_2) /* XQSPI flash CS */ #define FLASH_CLK (LL_GPIO_PIN_4) /* XQSPI flash CLK */ #define FLASH_IO_0 (LL_GPIO_PIN_7) /* XQSPI flash IO0 */ @@ -147,7 +149,7 @@ static void BLE_power_check(void) static void system_calibration(void) { - system_pmu_calibration_init(30000); + system_pmu_calibration_init(PMU_CALIBRATION_DURATION_MS); system_pmu_deinit(); SystemCoreSetClock((mcu_clock_type_t)SYSTEM_CLOCK); diff --git a/gr551x/sdk_liteos/liteos_m/los_port_pm.c b/gr551x/sdk_liteos/liteos_m/los_port_pm.c index 3d44985..6d0db9a 100644 --- a/gr551x/sdk_liteos/liteos_m/los_port_pm.c +++ b/gr551x/sdk_liteos/liteos_m/los_port_pm.c @@ -25,142 +25,128 @@ #include "los_task.h" #include "los_sched.h" -#include +#include "los_port_pm.h" -#define TICK_MS_IN_HUS (2000) -#define SYS_BLE_SLEEP_ALGO_HUS (580) -#define SLP_WAKUP_ALGO_LP_CNT (32) -#define DEEPSLEEP_TIME_MIN_MS (5) +#define TICK_MS_IN_HUS (2000) +#define SYS_BLE_SLEEP_ALGO_HUS (580) +#define SLP_WAKUP_ALGO_LP_CNT (32) +#define DEEPSLEEP_TIME_MIN_MS (5) #define DEEPSLEEP_TIME_MIN_SYSTICK (DEEPSLEEP_TIME_MIN_MS * (OS_SYS_CLOCK / 1000)) -extern void ultra_wfi(void); -extern uint32_t get_remain_sleep_dur(void); -extern void warm_boot_second(void); - static uint64_t g_tickTimerBaseBeforeSleep = 0; static uint32_t g_lpCntWhenTickStop = 0; static uint32_t g_lpCntWhenTickReload = 0; TINY_RAM_SECTION uint32_t OsSleepMsGet(void) { - g_tickTimerBaseBeforeSleep = OsGetCurrSchedTimeCycle(); - return ((uint32_t)(OsSchedGetNextExpireTime(g_tickTimerBaseBeforeSleep) - g_tickTimerBaseBeforeSleep)) / OS_CYCLE_PER_TICK; + g_tickTimerBaseBeforeSleep = OsGetCurrSchedTimeCycle(); + return ((uint32_t)(OsSchedGetNextExpireTime(g_tickTimerBaseBeforeSleep) - g_tickTimerBaseBeforeSleep)) / + OS_CYCLE_PER_TICK; } TINY_RAM_SECTION void SysTickReload(void) { - SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; - SysTick->LOAD = (UINT32)((OS_SYS_CLOCK / LOSCFG_BASE_CORE_TICK_PER_SECOND) - 1UL); /* set reload register */ - SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ - SysTick->CTRL |= (SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk); + SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; + SysTick->LOAD = (UINT32)((OS_SYS_CLOCK / LOSCFG_BASE_CORE_TICK_PER_SECOND) - 1UL); + SysTick->VAL = 0UL; + SysTick->CTRL |= (SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk); } TINY_RAM_SECTION static void pwrMgmtSleepDurLimit(uint32_t sleepMs) { - uint32_t sleepHus = sleepMs * TICK_MS_IN_HUS - SYS_BLE_SLEEP_ALGO_HUS; - if (get_remain_sleep_dur() > sleepHus) - { - pwr_mgmt_ble_wakeup(); - } - sys_ble_heartbeat_period_set(sleepHus); + uint32_t sleepHus = sleepMs * TICK_MS_IN_HUS - SYS_BLE_SLEEP_ALGO_HUS; + if (get_remain_sleep_dur() > sleepHus) { + pwr_mgmt_ble_wakeup(); + } + sys_ble_heartbeat_period_set(sleepHus); } TINY_RAM_SECTION static void pwrMgmtEnterSleepWithCond(uint32_t sleepMs) { - pwrMgmtSleepDurLimit(sleepMs); + pwrMgmtSleepDurLimit(sleepMs); - uint32_t intSave = LOS_IntLock(); + uint32_t intSave = LOS_IntLock(); - if (DEVICE_BUSY == pwr_mgmt_dev_suspend()) - { - ultra_wfi(); - LOS_IntRestore(intSave); - return; - } + if (DEVICE_BUSY == pwr_mgmt_dev_suspend()) { + ultra_wfi(); + LOS_IntRestore(intSave); + return; + } - if (PMR_MGMT_SLEEP_MODE != pwr_mgmt_mode_get()) - { - LOS_IntRestore(intSave); - return; - } + if (PMR_MGMT_SLEEP_MODE != pwr_mgmt_mode_get()) { + LOS_IntRestore(intSave); + return; + } - pwr_mgmt_mode_t bleState = pwr_mgmt_baseband_state_get(); - switch (bleState) - { - case PMR_MGMT_IDLE_MODE: - ultra_wfi(); - case PMR_MGMT_ACTIVE_MODE: - LOS_IntRestore(intSave); - return; - } + pwr_mgmt_mode_t bleState = pwr_mgmt_baseband_state_get(); + switch (bleState) { + case PMR_MGMT_IDLE_MODE: + ultra_wfi(); + case PMR_MGMT_ACTIVE_MODE: + LOS_IntRestore(intSave); + return; + } - g_lpCntWhenTickStop = ll_pwr_get_comm_sleep_duration(); + g_lpCntWhenTickStop = ll_pwr_get_comm_sleep_duration(); - pwr_mgmt_save_context(); + pwr_mgmt_save_context(); - if (pwr_mgmt_get_wakeup_flag() == COLD_BOOT) - { - if (PMR_MGMT_IDLE_MODE == pwr_mgmt_shutdown()) - { - ultra_wfi(); - LOS_IntRestore(intSave); - return; - } - LOS_IntRestore(intSave); - } - else - { - pwr_mgmt_set_wakeup_flag(COLD_BOOT); + if (pwr_mgmt_get_wakeup_flag() == COLD_BOOT) { + if (PMR_MGMT_IDLE_MODE == pwr_mgmt_shutdown()) { + ultra_wfi(); + LOS_IntRestore(intSave); + return; + } + LOS_IntRestore(intSave); + } else { + pwr_mgmt_set_wakeup_flag(COLD_BOOT); - uint32_t intSaveLocal = LOS_IntLock(); + uint32_t intSaveLocal = LOS_IntLock(); - g_lpCntWhenTickReload = ll_pwr_get_comm_sleep_duration(); - SysTickReload(); + g_lpCntWhenTickReload = ll_pwr_get_comm_sleep_duration(); + SysTickReload(); - uint32_t sleepLpCycles = g_lpCntWhenTickReload - g_lpCntWhenTickStop + SLP_WAKUP_ALGO_LP_CNT; - uint32_t lpCycles2HusErr = 0; - uint32_t sleepHus = sys_lpcycles_2_hus(sleepLpCycles, &lpCycles2HusErr); - uint32_t sleepSystick = sleepHus * (OS_CYCLE_PER_TICK / TICK_MS_IN_HUS); + uint32_t sleepLpCycles = g_lpCntWhenTickReload - g_lpCntWhenTickStop + SLP_WAKUP_ALGO_LP_CNT; + uint32_t lpCycles2HusErr = 0; + uint32_t sleepHus = sys_lpcycles_2_hus(sleepLpCycles, &lpCycles2HusErr); + uint32_t sleepSystick = sleepHus * (OS_CYCLE_PER_TICK / TICK_MS_IN_HUS); - OsTickTimerBaseReset(g_tickTimerBaseBeforeSleep + sleepSystick); - LOS_SchedTickHandler(); + OsTickTimerBaseReset(g_tickTimerBaseBeforeSleep + sleepSystick); + LOS_SchedTickHandler(); - LOS_IntRestore(intSaveLocal); - warm_boot_second(); - } + LOS_IntRestore(intSaveLocal); + warm_boot_second(); + } } TINY_RAM_SECTION static void osPmEnterHandler(void) { - uint32_t intSave = LOS_IntLock(); + uint32_t intSave = LOS_IntLock(); - if ((SCB->ICSR & SCB_ICSR_PENDSTSET_Msk)) - { - LOS_IntRestore(intSave); - return; - } + if ((SCB->ICSR & SCB_ICSR_PENDSTSET_Msk)) { + LOS_IntRestore(intSave); + return; + } - uint32_t sleepMs = OsSleepMsGet(); - LOS_IntRestore(intSave); + uint32_t sleepMs = OsSleepMsGet(); + LOS_IntRestore(intSave); - if (sleepMs < 5) - { - ultra_wfi(); - return; - } + if (sleepMs < 5) { + ultra_wfi(); + return; + } - if (PMR_MGMT_SLEEP_MODE != pwr_mgmt_mode_get()) - { - ultra_wfi(); - return; - } + if (PMR_MGMT_SLEEP_MODE != pwr_mgmt_mode_get()) { + ultra_wfi(); + return; + } - LOS_TaskLock(); - pwrMgmtEnterSleepWithCond(sleepMs); - LOS_TaskUnlock(); + LOS_TaskLock(); + pwrMgmtEnterSleepWithCond(sleepMs); + LOS_TaskUnlock(); } void GR551xPwrMgmtInit(void) { - OsPmEnterHandlerSet(osPmEnterHandler); + OsPmEnterHandlerSet(osPmEnterHandler); } diff --git a/gr551x/sdk_liteos/liteos_m/los_port_pm.h b/gr551x/sdk_liteos/liteos_m/los_port_pm.h new file mode 100644 index 0000000..4e5cbc9 --- /dev/null +++ b/gr551x/sdk_liteos/liteos_m/los_port_pm.h @@ -0,0 +1,12 @@ +#ifndef __LOS_PORT_PM_H__ +#define __LOS_PORT_PM_H__ + +#include + +void ultra_wfi(void); + +uint32_t get_remain_sleep_dur(void); + +void warm_boot_second(void); + +#endif // __LOS_PORT_PM_H__ \ No newline at end of file diff --git a/gr551x/sdk_liteos/platform/uart/uart.c b/gr551x/sdk_liteos/platform/uart/uart.c index bd15681..d282cb6 100755 --- a/gr551x/sdk_liteos/platform/uart/uart.c +++ b/gr551x/sdk_liteos/platform/uart/uart.c @@ -134,7 +134,6 @@ int HiLogWriteInternal(const char *buffer, size_t bufLen) #if APP_LOG_PORT == 0 int ret = app_uart_transmit_sync(LOG_UART_ID, buffer, bufLen, UART_TX_TIMEOUT); #elif APP_LOG_PORT == 1 - // TODO: implement error code and timeout here int ret = 0; bsp_segger_rtt_send(buffer, bufLen); #endif // APP_LOG_PORT == 0