TMR3_CapInit 进睡眠后 key唤醒升压 就出错
This commit is contained in:
parent
1de684d1f7
commit
43d4997130
|
@ -31,18 +31,25 @@ __attribute__((aligned(4))) uint32_t MEM_BUF[BLE_MEMHEAP_SIZE / 4];
|
||||||
|
|
||||||
static uint8_t key_press_cnt = 0;
|
static uint8_t key_press_cnt = 0;
|
||||||
|
|
||||||
|
// __HIGH_CODE
|
||||||
void app_task_handler(TeAppEvtType app_evt_type)
|
void app_task_handler(TeAppEvtType app_evt_type)
|
||||||
{
|
{
|
||||||
BSP_BlockSleep();
|
FEED_IWDG();
|
||||||
// BSP_BlockSleep();
|
|
||||||
// BSP_RequestBoost();
|
|
||||||
|
|
||||||
|
BSP_BlockSleep();
|
||||||
|
BSP_RequestBoost();
|
||||||
|
|
||||||
|
#if 1
|
||||||
switch (app_evt_type)
|
switch (app_evt_type)
|
||||||
{
|
{
|
||||||
case kKeyShort:
|
case kKeyShort:
|
||||||
|
{
|
||||||
logDebug("button short press");
|
logDebug("button short press");
|
||||||
|
|
||||||
key_press_cnt++;
|
key_press_cnt++;
|
||||||
logDebug("key_press_cnt = %d", key_press_cnt);
|
logDebug("key_press_cnt = %d", key_press_cnt);
|
||||||
|
#if 1
|
||||||
|
// tmos_set_event(vavle_task_id, VAVLE_DECT_SWITCH_START_EVT);
|
||||||
if (key_press_cnt == 1)
|
if (key_press_cnt == 1)
|
||||||
{
|
{
|
||||||
logDebug("LED显示状态");
|
logDebug("LED显示状态");
|
||||||
|
@ -83,8 +90,9 @@ void app_task_handler(TeAppEvtType app_evt_type)
|
||||||
// tmos_start_task(led_task_id, LED_SHOW_ONCE_EVT, 1000);
|
// tmos_start_task(led_task_id, LED_SHOW_ONCE_EVT, 1000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case kKeyLong:
|
case kKeyLong:
|
||||||
logDebug("button long press");
|
logDebug("button long press");
|
||||||
|
|
||||||
|
@ -108,6 +116,8 @@ void app_task_handler(TeAppEvtType app_evt_type)
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*********************************************************************
|
/*********************************************************************
|
||||||
|
@ -193,12 +203,14 @@ int main(void)
|
||||||
BSP_BEEP_LED_EMV_Init();
|
BSP_BEEP_LED_EMV_Init();
|
||||||
GXHTC3C_Init();
|
GXHTC3C_Init();
|
||||||
BSP_ADC_Init();
|
BSP_ADC_Init();
|
||||||
BSP_VAVLE_Init();
|
|
||||||
|
|
||||||
BSP_BlockSleep();
|
BSP_BlockSleep();
|
||||||
BSP_RequestBoost();
|
BSP_RequestBoost();
|
||||||
DelayMs(100);
|
DelayMs(100);
|
||||||
|
|
||||||
|
BSP_VAVLE_Init();
|
||||||
|
|
||||||
|
|
||||||
ShowLed();
|
ShowLed();
|
||||||
BEEP_ON;
|
BEEP_ON;
|
||||||
DelayMs(500);
|
DelayMs(500);
|
||||||
|
|
|
@ -6,6 +6,8 @@
|
||||||
#include "SLEEP.h"
|
#include "SLEEP.h"
|
||||||
#include "bsp_valve.h"
|
#include "bsp_valve.h"
|
||||||
|
|
||||||
|
#include "bsp_iwdg.h"
|
||||||
|
|
||||||
// https://www.cnblogs.com/iot-fan/p/14304943.html
|
// https://www.cnblogs.com/iot-fan/p/14304943.html
|
||||||
|
|
||||||
#undef LOG_ENABLE
|
#undef LOG_ENABLE
|
||||||
|
@ -34,6 +36,7 @@ static void KEY_Task_ProcessTmosMsg(tmos_event_hdr_t *pMsg)
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
|
// __HIGH_CODE
|
||||||
static uint16_t KEY_Task_ProcessEvent(uint8_t task_id, uint16_t events)
|
static uint16_t KEY_Task_ProcessEvent(uint8_t task_id, uint16_t events)
|
||||||
{
|
{
|
||||||
if (events & SYS_EVENT_MSG)
|
if (events & SYS_EVENT_MSG)
|
||||||
|
@ -51,6 +54,8 @@ static uint16_t KEY_Task_ProcessEvent(uint8_t task_id, uint16_t events)
|
||||||
|
|
||||||
if (events & KEY_SCAN_EVT)
|
if (events & KEY_SCAN_EVT)
|
||||||
{
|
{
|
||||||
|
FEED_IWDG();
|
||||||
|
|
||||||
static volatile uint8_t key_vaild_times = 0;
|
static volatile uint8_t key_vaild_times = 0;
|
||||||
static volatile bool key_vaild_for_long_press = false;
|
static volatile bool key_vaild_for_long_press = false;
|
||||||
if (IS_KEY_Vaild())
|
if (IS_KEY_Vaild())
|
||||||
|
@ -63,7 +68,6 @@ static uint16_t KEY_Task_ProcessEvent(uint8_t task_id, uint16_t events)
|
||||||
{
|
{
|
||||||
p_handler(kKeyLong);
|
p_handler(kKeyLong);
|
||||||
}
|
}
|
||||||
// PRINT("WE should power switch here\r\n");
|
|
||||||
key_vaild_for_long_press = true;
|
key_vaild_for_long_press = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -74,7 +78,7 @@ static uint16_t KEY_Task_ProcessEvent(uint8_t task_id, uint16_t events)
|
||||||
key_timeout_cnt = KEY_TIMOUT_MS / KEY_SACN_MS;
|
key_timeout_cnt = KEY_TIMOUT_MS / KEY_SACN_MS;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ // button release
|
{
|
||||||
if (key_vaild_times)
|
if (key_vaild_times)
|
||||||
{
|
{
|
||||||
if ((key_vaild_times) < (KEY_LONG_PRESS_MS / KEY_SACN_MS))
|
if ((key_vaild_times) < (KEY_LONG_PRESS_MS / KEY_SACN_MS))
|
||||||
|
@ -82,7 +86,6 @@ static uint16_t KEY_Task_ProcessEvent(uint8_t task_id, uint16_t events)
|
||||||
p_handler(kKeyShort);
|
p_handler(kKeyShort);
|
||||||
}
|
}
|
||||||
key_vaild_times = 0;
|
key_vaild_times = 0;
|
||||||
// PRINT("KEY VAILED\r\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
key_vaild_for_long_press = false;
|
key_vaild_for_long_press = false;
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* @Author : stark1898y 1658608470@qq.com
|
* @Author : stark1898y 1658608470@qq.com
|
||||||
* @Date : 2024-12-15 15:01:15
|
* @Date : 2024-12-15 15:01:15
|
||||||
* @LastEditors : stark1898y 1658608470@qq.com
|
* @LastEditors : stark1898y 1658608470@qq.com
|
||||||
* @LastEditTime : 2025-04-22 16:15:33
|
* @LastEditTime : 2025-05-21 15:56:55
|
||||||
* @FilePath : \BLE_TYQ_CH584M\BSP\src\bsp_valve.c
|
* @FilePath : \BLE_TYQ_CH584M\BSP\src\bsp_valve.c
|
||||||
* @Description :
|
* @Description :
|
||||||
*
|
*
|
||||||
|
@ -82,8 +82,8 @@ void VavleDect_Start(void)
|
||||||
TMR3_CapInit(FallEdge_To_FallEdge);
|
TMR3_CapInit(FallEdge_To_FallEdge);
|
||||||
TMR3_CAPTimeoutCfg(GetSysClock() / 100); // 设置捕捉超时时间 10ms
|
TMR3_CAPTimeoutCfg(GetSysClock() / 100); // 设置捕捉超时时间 10ms
|
||||||
|
|
||||||
// TMR3_CAPTimeoutCfg(0x3FFFFFF); // 设置捕捉超时时间
|
TMR3_DMACfg(ENABLE, (uint16_t)(uint32_t)&cap_buf[0]
|
||||||
TMR3_DMACfg(ENABLE, (uint16_t)(uint32_t)&cap_buf[0], (uint16_t)(uint32_t)&cap_buf[CAP_BUF_LEN], Mode_Single);
|
, (uint16_t)(uint32_t)&cap_buf[CAP_BUF_LEN], Mode_Single);
|
||||||
TMR3_ITCfg(ENABLE, TMR0_3_IT_DMA_END); // 开启DMA完成中断
|
TMR3_ITCfg(ENABLE, TMR0_3_IT_DMA_END); // 开启DMA完成中断
|
||||||
PFIC_EnableIRQ(TMR3_IRQn);
|
PFIC_EnableIRQ(TMR3_IRQn);
|
||||||
|
|
||||||
|
@ -165,62 +165,6 @@ void VavleDect_Switch(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
/**
|
|
||||||
* @description: 从接收缓冲区中获取一帧有效数据
|
|
||||||
* @param {TsFrameData} *pFrameData 主机帧
|
|
||||||
* @param {uint8_t} *p_src 接收缓冲区
|
|
||||||
* @param {uint16_t} src_len 接收缓冲区长度
|
|
||||||
* @return {*}
|
|
||||||
*/
|
|
||||||
TsFrameData *HR_GetFrameData(const uint8_t *p_src, const uint8_t src_len)
|
|
||||||
{
|
|
||||||
uint8_t data_field_len = 0;
|
|
||||||
uint8_t check_sum = 0;
|
|
||||||
|
|
||||||
TsFrameData *get_buffer = NULL;
|
|
||||||
|
|
||||||
for (uint8_t i = 0; i < src_len; i++)
|
|
||||||
{
|
|
||||||
// 找帧头
|
|
||||||
if (p_src[i] == FRAME_HEADER)
|
|
||||||
{
|
|
||||||
// 找数据长度
|
|
||||||
data_field_len = p_src[i + 2];
|
|
||||||
// 找帧尾
|
|
||||||
if (p_src[i + 2 + data_field_len + 2] == FRAME_TAIL)
|
|
||||||
{
|
|
||||||
check_sum = CheckSum(&p_src[i], (3 + data_field_len));
|
|
||||||
|
|
||||||
if (p_src[i + 2 + data_field_len + 1] == check_sum)
|
|
||||||
{
|
|
||||||
get_buffer = (TsFrameData *)tmos_msg_allocate(sizeof(TsFrameData) + sizeof(uint8_t) * data_field_len);
|
|
||||||
if (get_buffer == NULL)
|
|
||||||
{
|
|
||||||
logError("tmos_msg_allocate fail");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
get_buffer->cmd = p_src[i + 1];
|
|
||||||
get_buffer->len = data_field_len;
|
|
||||||
|
|
||||||
if (data_field_len > 0)
|
|
||||||
{
|
|
||||||
tmos_memcmp(get_buffer->data, &p_src[i + 4], data_field_len);
|
|
||||||
}
|
|
||||||
logDebug("HR_GetDataFrame Success!");
|
|
||||||
|
|
||||||
return get_buffer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
logError("HR_GetDataFrame Fail!");
|
|
||||||
|
|
||||||
return get_buffer;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
TsFrameData *BSP_VAVLE_GetFrameData(uint8_t *data, uint8_t len)
|
TsFrameData *BSP_VAVLE_GetFrameData(uint8_t *data, uint8_t len)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
@ -362,12 +306,6 @@ void BSP_VALVE_Generate_ValveResponse(TsRawFrameData *pRawData, TeFrameCmd cmd,
|
||||||
// logHexDumpAll(&pRawData->buf[0], pRawData->len);
|
// logHexDumpAll(&pRawData->buf[0], pRawData->len);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BSP_CloseValve(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
DelayMs(100);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void VAVLE_Task_ProcessTmosMsg(uint8_t *p_rev_msg)
|
static void VAVLE_Task_ProcessTmosMsg(uint8_t *p_rev_msg)
|
||||||
{
|
{
|
||||||
if (p_rev_msg)
|
if (p_rev_msg)
|
||||||
|
@ -660,8 +598,8 @@ void BSP_VAVLE_Init(void)
|
||||||
gValveData.type = kTyq;
|
gValveData.type = kTyq;
|
||||||
gValveData.bat = BSP_ReadVbat();
|
gValveData.bat = BSP_ReadVbat();
|
||||||
|
|
||||||
// //立即开始一个event
|
tmos_start_task(vavle_task_id, VAVLE_LOOP_DECT_EVT, MS1_TO_SYSTEM_TIME(VALVE_DECT_PERIOD_MS));
|
||||||
// tmos_set_event(vavle_task_id, VAVLE_RX_DATA_EVT);
|
|
||||||
|
|
||||||
// PA2
|
// PA2
|
||||||
/* 定时器3,CAP捕捉, */
|
/* 定时器3,CAP捕捉, */
|
||||||
|
@ -671,13 +609,31 @@ void BSP_VAVLE_Init(void)
|
||||||
// TMR3功能引脚映射选择位:
|
// TMR3功能引脚映射选择位:
|
||||||
// 1:TMR3_/PWM3_/CAP3_映射到PA[2];
|
// 1:TMR3_/PWM3_/CAP3_映射到PA[2];
|
||||||
R16_PIN_ALTERNATE |= (1 << 3);
|
R16_PIN_ALTERNATE |= (1 << 3);
|
||||||
|
logDebug("TMR3_CapInit 0");
|
||||||
|
// TODO:这里进睡眠就出错?
|
||||||
|
#if 0
|
||||||
|
TMR3_CapInit(FallEdge_To_FallEdge);
|
||||||
|
// (1 / 62.4MHz) * 2的26次方 = 0.01602564102564102564102564102564 us * 67108864 约等于 1.0754625641025641025641025641025 S
|
||||||
|
// TMR3_CAPTimeoutCfg(FREQ_SYS ); // 设置捕捉超时时间
|
||||||
|
TMR3_CAPTimeoutCfg(GetSysClock() / 100); // 设置捕捉超时时间 10ms
|
||||||
|
|
||||||
// TMR3_CapInit(FallEdge_To_FallEdge);
|
// TMR3_CAPTimeoutCfg(0x3FFFFFF); // 设置捕捉超时时间
|
||||||
// // (1 / 62.4MHz) * 2的26次方 = 0.01602564102564102564102564102564 us * 67108864 约等于 1.0754625641025641025641025641025 S
|
TMR3_DMACfg(ENABLE, (uint16_t)(uint32_t)&cap_buf[0], (uint16_t)(uint32_t)&cap_buf[20], Mode_Single);
|
||||||
// // TMR3_CAPTimeoutCfg(FREQ_SYS ); // 设置捕捉超时时间
|
TMR3_ITCfg(ENABLE, TMR0_3_IT_DMA_END); // 开启DMA完成中断
|
||||||
// TMR3_CAPTimeoutCfg(GetSysClock() / 100); // 设置捕捉超时时间 10ms
|
PFIC_EnableIRQ(TMR3_IRQn);
|
||||||
|
|
||||||
tmos_start_task(vavle_task_id, VAVLE_LOOP_DECT_EVT, MS1_TO_SYSTEM_TIME(VALVE_DECT_PERIOD_MS));
|
logDebug("TMR3_CapInit");
|
||||||
|
while(cap_flag == 0);
|
||||||
|
cap_flag = 0;
|
||||||
|
for(uint8_t i = 0; i < 20; i++)
|
||||||
|
{
|
||||||
|
logDebug("%08ld ", cap_buf[i] & 0x1ffffff); // 26bit, 最高位表示 高电平还是低电平
|
||||||
|
uint16_t t = ((cap_buf[i] & 0x1ffffff) * 1.0f) / FREQ_SYS * 1000000;
|
||||||
|
uint16_t f = 1000000 / t;
|
||||||
|
logDebug("T = %04d us, f = %04d Hz", t, f);
|
||||||
|
BSP_UART1_TxLoop();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
logInfo("BSP_Valve_Init");
|
logInfo("BSP_Valve_Init");
|
||||||
}
|
}
|
||||||
|
@ -702,37 +658,3 @@ void TMR3_IRQHandler(void) // TMR3 定时中断
|
||||||
cap_flag = 1;
|
cap_flag = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
// GPIOA_ModeCfg(GPIO_Pin_2, GPIO_ModeIN_Floating);
|
|
||||||
|
|
||||||
// TMR3功能引脚映射选择位:
|
|
||||||
// 1:TMR3_/PWM3_/CAP3_映射到PA[2];
|
|
||||||
R16_PIN_ALTERNATE |= (1 << 3);
|
|
||||||
logDebug("TMR3_CapInit 0");
|
|
||||||
|
|
||||||
TMR3_CapInit(FallEdge_To_FallEdge);
|
|
||||||
// (1 / 62.4MHz) * 2的26次方 = 0.01602564102564102564102564102564 us * 67108864 约等于 1.0754625641025641025641025641025 S
|
|
||||||
// TMR3_CAPTimeoutCfg(FREQ_SYS ); // 设置捕捉超时时间
|
|
||||||
TMR3_CAPTimeoutCfg(GetSysClock() / 100); // 设置捕捉超时时间 10ms
|
|
||||||
|
|
||||||
// TMR3_CAPTimeoutCfg(0x3FFFFFF); // 设置捕捉超时时间
|
|
||||||
TMR3_DMACfg(ENABLE, (uint16_t)(uint32_t)&CapBuf[0], (uint16_t)(uint32_t)&CapBuf[20], Mode_Single);
|
|
||||||
TMR3_ITCfg(ENABLE, TMR0_3_IT_DMA_END); // 开启DMA完成中断
|
|
||||||
PFIC_EnableIRQ(TMR3_IRQn);
|
|
||||||
|
|
||||||
logDebug("TMR3_CapInit");
|
|
||||||
while(capFlag == 0);
|
|
||||||
capFlag = 0;
|
|
||||||
for(uint8_t i = 0; i < 20; i++)
|
|
||||||
{
|
|
||||||
logDebug("%08ld ", CapBuf[i] & 0x1ffffff); // 26bit, 最高位表示 高电平还是低电平
|
|
||||||
uint16_t t = ((CapBuf[i] & 0x1ffffff) * 1.0f) / FREQ_SYS * 1000000;
|
|
||||||
uint16_t f = 1000000 / t;
|
|
||||||
logDebug("T = %04d us, f = %04d Hz", t, f);
|
|
||||||
BSP_UART1_TxLoop();
|
|
||||||
}
|
|
||||||
|
|
||||||
// DelayMs(1000 * 30);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
Loading…
Reference in New Issue