refactor(vd960Loop): 算法回退到 DLD154V4B,四通道适配
- 用 DLD154V4B vd1_task/per_channel 替换 vds_task 复杂算法
- 移除 FUNCTION_B/二次判断/快速变化/多重确认等增强特性
- 保留平坦性离开算法 (CN200910309382),每通道独立状态
- 灵敏度表改为 DLD154V4B 4级: {216,108,36,10} / {108,72,18,9}
- 清理废弃类型: FltHistoryManager, Loop_ACS_Info, StageRangeConfig 等
- 首次添加 vd960DBN 完整源码
This commit is contained in:
107
vd960DBN/BLE/HAL/SLEEP.c
Normal file
107
vd960DBN/BLE/HAL/SLEEP.c
Normal file
@@ -0,0 +1,107 @@
|
||||
/********************************** (C) COPYRIGHT *******************************
|
||||
* File Name : SLEEP.c
|
||||
* Author : WCH
|
||||
* Version : V1.2
|
||||
* Date : 2022/01/18
|
||||
* Description : Sleep configuration and its initialization
|
||||
*********************************************************************************
|
||||
* Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd.
|
||||
* Attention: This software (modified or not) and binary are used for
|
||||
* microcontroller manufactured by Nanjing Qinheng Microelectronics.
|
||||
*******************************************************************************/
|
||||
|
||||
/******************************************************************************/
|
||||
/* Header file contains */
|
||||
#include "HAL.h"
|
||||
|
||||
#define US_TO_TICK(us) (uint32_t)((us) / (1000000 / ((CAB_LSIFQ / 2))))
|
||||
|
||||
#define SLEEP_PERIOD_MIN_US 200
|
||||
#define SLEEP_PERIOD_MAX_TICK 0xFFD2393F
|
||||
#define SLEEP_PERIOD_MIN_TICK US_TO_TICK(SLEEP_PERIOD_MIN_US)
|
||||
#define HESREADY_TICK US_TO_TICK(WAKE_UP_MAX_TIME_US)
|
||||
|
||||
/*******************************************************************************
|
||||
* @fn BLE_LowPower
|
||||
*
|
||||
* @brief 启动睡眠
|
||||
*
|
||||
* @param time - 唤醒的时间点(RTC绝对值)
|
||||
*
|
||||
* @return state.
|
||||
*/
|
||||
uint32_t BLE_LowPower(uint32_t time)
|
||||
{
|
||||
#if(defined(HAL_SLEEP)) && (HAL_SLEEP == TRUE)
|
||||
uint32_t current_time;
|
||||
uint32_t sleep_period;
|
||||
uint32_t wake_time;
|
||||
|
||||
wake_time = time - HESREADY_TICK;
|
||||
|
||||
__disable_irq();
|
||||
current_time = RTC_GetCounter();
|
||||
sleep_period = wake_time - current_time;
|
||||
|
||||
if((sleep_period < SLEEP_PERIOD_MIN_TICK) || (sleep_period > SLEEP_PERIOD_MAX_TICK))
|
||||
{
|
||||
__enable_irq();
|
||||
return 2;
|
||||
}
|
||||
|
||||
RTC_SetTignTime(wake_time);
|
||||
__enable_irq();
|
||||
|
||||
#if(DEBUG == DEBUG_UART1) // To use other serial ports to output printing information, you need to modify this line of code
|
||||
while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
|
||||
{
|
||||
__NOP();
|
||||
}
|
||||
#endif
|
||||
// LOW POWER-sleep
|
||||
if(!RTCTigFlag)
|
||||
{
|
||||
PWR_EnterSTOPMode_RAM_LV(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);
|
||||
SystemInit();
|
||||
}
|
||||
else
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* @fn HAL_SleepInit
|
||||
*
|
||||
* @brief Configure sleep Wake-up source - RTC wake up, trigger mode
|
||||
*
|
||||
* @param None.
|
||||
*
|
||||
* @return None.
|
||||
*/
|
||||
void HAL_SleepInit(void)
|
||||
{
|
||||
#if(defined(HAL_SLEEP)) && (HAL_SLEEP == TRUE)
|
||||
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
|
||||
RTC_WaitForLastTask();
|
||||
|
||||
RTC_ITConfig(RTC_IT_ALR, ENABLE);
|
||||
EXTI_InitTypeDef EXTI_InitStructure = {0};
|
||||
NVIC_InitTypeDef NVIC_InitStructure = {0};
|
||||
|
||||
EXTI_InitStructure.EXTI_Line = EXTI_Line17;
|
||||
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
|
||||
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
|
||||
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
|
||||
EXTI_Init(&EXTI_InitStructure);
|
||||
|
||||
NVIC_InitStructure.NVIC_IRQChannel = RTCAlarm_IRQn;
|
||||
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
|
||||
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
|
||||
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
||||
NVIC_Init(&NVIC_InitStructure);
|
||||
#endif
|
||||
}
|
||||
Reference in New Issue
Block a user