暂存,频率检测可以,按键不对
This commit is contained in:
parent
ff9c225b0d
commit
5c469b4378
|
@ -19,6 +19,7 @@
|
|||
"bsp_valve.h": "c",
|
||||
"log.h": "c",
|
||||
"hal.h": "c",
|
||||
"bsp_iwdg.h": "c"
|
||||
"bsp_iwdg.h": "c",
|
||||
"bsp_valve_dect.h": "c"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -723,21 +723,21 @@ static void peripheralStateNotificationCB(gapRole_States_t newState, gapRoleEven
|
|||
*/
|
||||
static void performPeriodicTask(void)
|
||||
{
|
||||
|
||||
gValveData.bat = BSP_ReadVbat();
|
||||
|
||||
#if 0
|
||||
BSP_BlockSleep();
|
||||
BSP_RequestBoost();
|
||||
// DelayMs(1);
|
||||
ShowLed();
|
||||
|
||||
DelayMs(5);
|
||||
DelayMs(2);
|
||||
LED_ALL_OFF_DEINIT;
|
||||
// BEEP_OFF_DEINIT;
|
||||
|
||||
BSP_NoNeedBoost();
|
||||
BSP_RequestSleep();
|
||||
|
||||
#endif
|
||||
// µçѹ¹ýµÍ¾Í¹Ø·§
|
||||
if (gValveData.bat <= LOW_VABAT_CLOSE_VALUE)
|
||||
{
|
||||
|
@ -760,7 +760,7 @@ static void performPeriodicTask(void)
|
|||
logError("Read TempHumi Err");
|
||||
return;
|
||||
}
|
||||
#if 0
|
||||
#if 1
|
||||
logDebug("switch_status:%d Temp:%d Bat:%d Humi:%d%% RSSI: %d"
|
||||
, gValveData.switch_status, gValveData.temp, gValveData.bat, gValveData.humi, gValveData.rssi);
|
||||
|
||||
|
|
|
@ -46,38 +46,42 @@ void app_task_handler(TeAppEvtType app_evt_type)
|
|||
BSP_BlockSleep();
|
||||
BSP_RequestBoost();
|
||||
|
||||
// DelayMs(15);
|
||||
|
||||
switch (app_evt_type)
|
||||
{
|
||||
case kKeyShort:
|
||||
logDebug("button short press");
|
||||
key_press_cnt++;
|
||||
logDebug("key_press_cnt = %d", key_press_cnt);
|
||||
if (key_press_cnt == 1)
|
||||
|
||||
if (valve_switch_dect_flag)
|
||||
{
|
||||
valve_switch_dect_flag = 0;
|
||||
|
||||
logDebug("LED显示状态");
|
||||
// tmos_set_event(led_task_id, LED_SHOW_START_EVT);
|
||||
BSP_BlockSleep();
|
||||
BSP_RequestBoost();
|
||||
DelayMs(1);
|
||||
ShowLed();
|
||||
// tmos_stop_task(led_task_id, LED_SHOW_ONCE_EVT);
|
||||
// tmos_start_task(led_task_id, LED_SHOW_ONCE_EVT, 1000);
|
||||
}
|
||||
else if (key_press_cnt == 2)
|
||||
if (key_press_cnt >= 2)
|
||||
{
|
||||
if (gValveData.switch_status == kClosed)
|
||||
{
|
||||
logDebug("kClosed-->kOpened");
|
||||
// tmos_set_event(led_task_id, LED_SHOW_START_EVT);
|
||||
gValveData.switch_status = kOpened;
|
||||
BSP_BlockSleep();
|
||||
BSP_RequestBoost();
|
||||
DelayMs(1);
|
||||
ShowLed();
|
||||
// tmos_stop_task(led_task_id, LED_SHOW_ONCE_EVT);
|
||||
// tmos_start_task(led_task_id, LED_SHOW_ONCE_EVT, 1000);
|
||||
}
|
||||
else if (gValveData.switch_status != kClosed)
|
||||
// if (gValveData.switch_status == kClosed)
|
||||
// {
|
||||
// logDebug("kClosed-->kOpened");
|
||||
// // tmos_set_event(led_task_id, LED_SHOW_START_EVT);
|
||||
// gValveData.switch_status = kOpened;
|
||||
// BSP_BlockSleep();
|
||||
// BSP_RequestBoost();
|
||||
// DelayMs(1);
|
||||
// ShowLed();
|
||||
// // tmos_stop_task(led_task_id, LED_SHOW_ONCE_EVT);
|
||||
// // tmos_start_task(led_task_id, LED_SHOW_ONCE_EVT, 1000);
|
||||
// }
|
||||
// else
|
||||
if (gValveData.switch_status != kClosed)
|
||||
{
|
||||
logDebug("kOpened-->kClosed");
|
||||
gValveData.switch_status = kClosed;
|
||||
|
@ -194,7 +198,6 @@ int main(void)
|
|||
|
||||
BSP_BEEP_LED_EMV_Init();
|
||||
|
||||
|
||||
logDebug("Start @ChipID=%02X\n", R8_CHIP_ID);
|
||||
logError("中文测试 %2.2f", 123.456);
|
||||
|
||||
|
@ -210,19 +213,107 @@ int main(void)
|
|||
|
||||
BSP_KEY_Init(app_task_handler);
|
||||
|
||||
DelayMs(10);
|
||||
BSP_ADC_Init();
|
||||
|
||||
BSP_VAVLE_Init();
|
||||
|
||||
|
||||
BSP_BlockSleep();
|
||||
BSP_RequestBoost();
|
||||
#if 0
|
||||
DelayMs(1);
|
||||
EMV_CHARGE_EN;
|
||||
logDebug("EMV_CHARGE_EN");
|
||||
DelayMs(1500);
|
||||
|
||||
BOOST_EN;
|
||||
// 关阀动作,一定要先关充电的,防止其他12V用电
|
||||
EMV_CHARGE_OFF_DEINIT;
|
||||
BEEP_ON;
|
||||
logDebug("EMV_CHARGE_OFF_DEINIT");
|
||||
EMV_ON;
|
||||
logDebug("EMV_ON");
|
||||
DelayMs(100);
|
||||
|
||||
BEEP_OFF_DEINIT;
|
||||
EMV_CHARGE_OFF_DEINIT;
|
||||
EMV_OFF_DEINIT;
|
||||
LED_ALL_OFF_DEINIT;
|
||||
|
||||
DelayMs(100);
|
||||
|
||||
BSP_VAVLE_Init();
|
||||
VavleDect_Start();
|
||||
DelayMs(10);
|
||||
valve_switch_off_freq = VavleDect_GetFreq();
|
||||
logDebug("valve_switch_off_freq = %06d Hz", valve_switch_off_freq);
|
||||
|
||||
while (1)
|
||||
{
|
||||
LED_ALL_OFF_DEINIT;
|
||||
DelayMs(500);
|
||||
LED_R_ON;
|
||||
DelayMs(500);
|
||||
if (IS_KEY_Vaild())
|
||||
{
|
||||
DelayMs(20);
|
||||
if (IS_KEY_Vaild())
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DelayMs(100);
|
||||
|
||||
BSP_VAVLE_Init();
|
||||
VavleDect_Start();
|
||||
DelayMs(10);
|
||||
valve_switch_on_freq = VavleDect_GetFreq();
|
||||
logDebug("valve_switch_on_freq = %06d Hz", valve_switch_on_freq);
|
||||
valve_switch_freq = valve_switch_on_freq;
|
||||
VavleDect_Switch();
|
||||
#endif
|
||||
BSP_VAVLE_Init();
|
||||
|
||||
ShowLed();
|
||||
BEEP_ON;
|
||||
|
||||
DelayMs(1000 * 1);
|
||||
|
||||
// tmos_set_event(Peripheral_TaskID, SBP_REPLY_CMD_EVT);
|
||||
#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
|
||||
|
||||
LED_ALL_OFF_DEINIT;
|
||||
BEEP_OFF_DEINIT;
|
||||
|
||||
|
@ -243,4 +334,6 @@ int main(void)
|
|||
Main_Circulation();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************** endfile @ main ******************************/
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* @Author : stark1898y 1658608470@qq.com
|
||||
* @Date : 2024-12-12 15:55:38
|
||||
* @LastEditors : stark1898y 1658608470@qq.com
|
||||
* @LastEditTime : 2024-12-17 15:51:09
|
||||
* @LastEditTime : 2025-02-24 16:39:07
|
||||
* @FilePath : \BLE_TYQ_CH584M\BSP\inc\bsp_valve.h
|
||||
* @Description :
|
||||
*
|
||||
|
@ -23,9 +23,15 @@ extern tmosTaskID vavle_task_id;
|
|||
#define VAVLE_CLOSE_ACTION_EVT (0x0001 << 3) // 关阀,动作
|
||||
#define VAVLE_CLOSE_END_EVT (0x0001 << 4) // 关阀结束
|
||||
|
||||
#define VAVLE_LOW_VBAT_ALARM_EVT (0x0001 << 5) // 低电压提醒
|
||||
#define VAVLE_DECT_SWITCH_START_EVT (0x0001 << 5) // 检测电磁铁
|
||||
#define VAVLE_DECT_SWITCH_END_EVT (0x0001 << 6) // 检测电磁铁
|
||||
|
||||
#define VAVLE_LOW_VBAT_ALARM_EVT (0x0001 << 7) // 低电压提醒
|
||||
|
||||
#define VAVLE_LOOP_DECT_EVT (0x0001 << 8) // 循环检测
|
||||
|
||||
#define VAVLE_DECT_SWITCH_CALIB_EVT (0x0001 << 9) // 标定电磁铁
|
||||
|
||||
#define VAVLE_DECT_EVT (0x0001 << 6) // 循环检测
|
||||
|
||||
|
||||
#define VALVE_LOW_VBAT_ALARM_PERIOD_MS (1600 * 60 * 10)
|
||||
|
@ -84,8 +90,15 @@ typedef enum
|
|||
kUnknown = 0,
|
||||
kClosed,
|
||||
kOpened,
|
||||
kDisconnect,
|
||||
} TeValveSwitchStatus;
|
||||
|
||||
extern uint16_t valve_switch_on_freq;
|
||||
extern uint16_t valve_switch_off_freq;
|
||||
extern uint16_t valve_switch_freq;
|
||||
|
||||
extern volatile uint8_t valve_switch_dect_flag;
|
||||
|
||||
typedef struct __attribute__((packed))
|
||||
{
|
||||
// uint8_t status; // 1B 阀门工作状态 超欠压、过流
|
||||
|
@ -105,6 +118,10 @@ extern TsValveData gValveData;
|
|||
|
||||
uint8_t CheckSum(const uint8_t *data, size_t len);
|
||||
|
||||
void VavleDect_Switch(void);
|
||||
uint16_t VavleDect_GetFreq(void);
|
||||
void VavleDect_Start(void);
|
||||
|
||||
void BSP_VAVLE_Init(void);
|
||||
|
||||
TsFrameData* BSP_VAVLE_GetFrameData(uint8_t *data, uint8_t len);
|
||||
|
|
|
@ -25,12 +25,16 @@ uint16_t min_number = 0;
|
|||
uint16_t max_number = 0;
|
||||
double voltage = 0;
|
||||
|
||||
// https://www.cnblogs.com/iot-fan/p/14304854.html
|
||||
uint8_t BSP_ReadVbat(void)
|
||||
{
|
||||
uint8_t i;
|
||||
// VBAT
|
||||
uint32_t CountBat = 0;
|
||||
ADC_InterBATSampInit();
|
||||
DelayUs(1);
|
||||
ADC_ExcutSingleConver();
|
||||
DelayUs(1);
|
||||
for (i = 0; i < 20; i++)
|
||||
{
|
||||
adcBuff[i] = ADC_ExcutSingleConver(); // 连续采样20次
|
||||
|
@ -48,6 +52,9 @@ uint8_t BSP_ReadVbat(void)
|
|||
}
|
||||
logDebug("min_number = %d, max_number = %d", min_number, max_number);
|
||||
CountBat = (CountBat - min_number - max_number) / 18; // 删除最小与最大值
|
||||
// PGA=-12db
|
||||
// CountBat = CountBat * 1050 / 512 - (3 * 1050);
|
||||
CountBat = CountBat * 2.05078125 - 3150;
|
||||
uint8_t vbat = (uint8_t)(CountBat / 100);
|
||||
logDebug("AverageCountBat = %dmV, vbat = %d(100mV)", CountBat, vbat);
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ void ShowLed()
|
|||
LED_ALL_OFF_DEINIT;
|
||||
LED_Y_ON;
|
||||
|
||||
BEEP_ON;
|
||||
// BEEP_ON;
|
||||
logDebug("LED_Y_ON");
|
||||
}
|
||||
else if (gValveData.switch_status == kUnknown || gValveData.switch_status == kClosed)
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#include "log.h"
|
||||
|
||||
#include "SLEEP.h"
|
||||
#include "bsp_valve.h"
|
||||
|
||||
// https://www.cnblogs.com/iot-fan/p/14304943.html
|
||||
|
||||
|
@ -250,7 +251,10 @@ void BSP_KEY_Init(app_task_evt_handler_t handler)
|
|||
// 由外部上拉电阻了
|
||||
// 设置为浮空输入模式
|
||||
|
||||
GPIOB_ModeCfg(GPIO_Pin_16, GPIO_ModeIN_PU);
|
||||
// MCU_LDECT
|
||||
// GPIOA_ModeCfg(GPIO_Pin_2, GPIO_ModeIN_PU);
|
||||
|
||||
GPIOB_ModeCfg(GPIO_Pin_16, GPIO_ModeIN_Floating);
|
||||
|
||||
GPIOB_ModeCfg(GPIO_Pin_0, GPIO_ModeIN_Floating);
|
||||
// GPIOB_ModeCfg(GPIO_Pin_1, GPIO_ModeIN_Floating);
|
||||
|
@ -269,9 +273,6 @@ void BSP_KEY_Init(app_task_evt_handler_t handler)
|
|||
|
||||
tmos_start_task(key_task_id, KEY_SCAN_EVT, MS1_TO_SYSTEM_TIME(KEY_SACN_MS));
|
||||
#endif
|
||||
DelayMs(2);
|
||||
logDebug("BSP_KEY_Init=%d", IS_KEY_Vaild());
|
||||
DelayMs(2);
|
||||
logDebug("BSP_KEY_Init=%d", IS_KEY_Vaild());
|
||||
}
|
||||
|
||||
|
@ -292,6 +293,7 @@ void KEY_ProcessLoop(void)
|
|||
|
||||
key_wakeup_flag = 0;
|
||||
tmos_set_event(key_task_id, KEY_SCAN_EVT);
|
||||
tmos_set_event(vavle_task_id, VAVLE_DECT_SWITCH_START_EVT);
|
||||
logDebug("KEY_ProcessLoop");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* @Author : stark1898y 1658608470@qq.com
|
||||
* @Date : 2024-12-15 15:01:15
|
||||
* @LastEditors : stark1898y 1658608470@qq.com
|
||||
* @LastEditTime : 2025-02-22 17:20:22
|
||||
* @LastEditTime : 2025-02-24 17:33:09
|
||||
* @FilePath : \BLE_TYQ_CH584M\BSP\src\bsp_valve.c
|
||||
* @Description :
|
||||
*
|
||||
|
@ -36,6 +36,23 @@ TsRawFrameData RelyData;
|
|||
// 存储 当前task id 的全局变量
|
||||
tmosTaskID vavle_task_id = INVALID_TASK_ID;
|
||||
|
||||
#define ARRAY_SIZE(freq_arr) (sizeof(freq_arr) / sizeof((freq_arr)[0]))
|
||||
|
||||
volatile uint8_t cap_flag = 0;
|
||||
__attribute__((aligned(4))) uint32_t cap_buf[20];
|
||||
|
||||
#define CAP_BUF_LEN (20)
|
||||
|
||||
#define CAP_FREQ_MIN (2000U)
|
||||
#define CAP_FREQ_MAX (10000U)
|
||||
|
||||
uint16_t valve_switch_on_freq = 6535;
|
||||
uint16_t valve_switch_off_freq = 7508;
|
||||
|
||||
uint16_t valve_switch_freq = 0;
|
||||
|
||||
volatile uint8_t valve_switch_dect_flag = 0;
|
||||
|
||||
/**
|
||||
* @description: 从帧起始符开始到校验码之前所有字节的和的模256,即各字节不计超过255的溢出值的二进制算术和。
|
||||
* @param {uint8_t} *data
|
||||
|
@ -54,6 +71,98 @@ uint8_t CheckSum(const uint8_t *data, size_t len)
|
|||
return sum;
|
||||
}
|
||||
|
||||
void VavleDect_Start(void)
|
||||
{
|
||||
BSP_BlockSleep();
|
||||
BSP_RequestBoost();
|
||||
DelayMs(1);
|
||||
|
||||
tmos_memset(cap_buf, 0, sizeof(cap_buf));
|
||||
|
||||
// TMR3_CAPTimeoutCfg(0x3FFFFFF); // 设置捕捉超时时间
|
||||
TMR3_DMACfg(ENABLE, (uint16_t)(uint32_t)&cap_buf[0], (uint16_t)(uint32_t)&cap_buf[CAP_BUF_LEN], Mode_Single);
|
||||
TMR3_ITCfg(ENABLE, TMR0_3_IT_DMA_END); // 开启DMA完成中断
|
||||
PFIC_EnableIRQ(TMR3_IRQn);
|
||||
|
||||
logDebug("VavleDect_Start");
|
||||
}
|
||||
|
||||
// 一个数组中,去掉最大最小值,计算平均值
|
||||
uint16_t VavleDect_CalFreq(uint16_t freq_arr[], uint8_t n)
|
||||
{
|
||||
if (freq_arr == NULL || n <= 2)
|
||||
{
|
||||
logError("数组太小或为空,无法去除最大最小值");
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint16_t min, max;
|
||||
double average = 0;
|
||||
|
||||
for (uint8_t i = 0; i < n; i++)
|
||||
{
|
||||
average += freq_arr[i];
|
||||
if (i == 0)
|
||||
{
|
||||
min = freq_arr[i];
|
||||
max = freq_arr[i];
|
||||
}
|
||||
min = ((min > freq_arr[i]) ? freq_arr[i] : min); // 软件滤波
|
||||
max = ((max < freq_arr[i]) ? freq_arr[i] : max);
|
||||
}
|
||||
logDebug("min = %d, max = %d", min, max);
|
||||
average = (average - min - max) / (CAP_BUF_LEN - 2);
|
||||
|
||||
return (uint16_t)average;
|
||||
}
|
||||
|
||||
uint16_t VavleDect_GetFreq(void)
|
||||
{
|
||||
uint16_t freq = 0;
|
||||
if (cap_flag == 0)
|
||||
{
|
||||
TMR3_ITCfg(DISABLE, TMR0_3_IT_DMA_END); // 使用单次DMA功能+中断,注意完成后关闭此中断使能,否则会一直上报中断。
|
||||
TMR3_ClearITFlag(TMR0_3_IT_DMA_END); // 清除中断标志
|
||||
logError("cap err");
|
||||
return 0;
|
||||
}
|
||||
cap_flag = 0;
|
||||
uint16_t t[CAP_BUF_LEN] = {0};
|
||||
uint16_t f[CAP_BUF_LEN] = {0};
|
||||
for (uint8_t i = 0; i < CAP_BUF_LEN; i++)
|
||||
{
|
||||
// logDebug("%08ld ", cap_buf[i] & 0x1ffffff); // 26bit, 最高位表示 高电平还是低电平
|
||||
t[i] = ((cap_buf[i] & 0x1ffffff) * 1.0f) / FREQ_SYS * 1000000;
|
||||
f[i] = 1000000 / t[i];
|
||||
logDebug("T = %04d us, f = %04d Hz", t[i], f[i]);
|
||||
BSP_UART1_TxLoop();
|
||||
}
|
||||
freq = VavleDect_CalFreq(&f[0], CAP_BUF_LEN);
|
||||
|
||||
return freq;
|
||||
}
|
||||
|
||||
void VavleDect_Switch(void)
|
||||
{
|
||||
if (valve_switch_freq == 0)
|
||||
{
|
||||
gValveData.switch_status = kDisconnect;
|
||||
logError("valve_switch_freq err");
|
||||
return;
|
||||
}
|
||||
if (valve_switch_freq >= (valve_switch_off_freq - 100))
|
||||
{
|
||||
gValveData.switch_status = kOpened;
|
||||
logDebug("valve_switch_on");
|
||||
}
|
||||
else if (valve_switch_freq <= (valve_switch_on_freq + 100))
|
||||
{
|
||||
gValveData.switch_status = kClosed;
|
||||
logDebug("valve_switch_off");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#if 0
|
||||
/**
|
||||
* @description: 从接收缓冲区中获取一帧有效数据
|
||||
|
@ -342,10 +451,20 @@ static uint16_t VAVLE_Task_ProcessEvent(uint8_t task_id, uint16_t events)
|
|||
|
||||
BSP_BlockSleep();
|
||||
BSP_RequestBoost();
|
||||
DelayMs(1);
|
||||
DelayUs(200);
|
||||
|
||||
// EMV_CHARGE
|
||||
// EMV_CHARGE_EN;
|
||||
// DelayUs(500);
|
||||
// EMV_CHARGE_OFF_DEINIT;
|
||||
// DelayUs(200);
|
||||
|
||||
// DelayUs(500);
|
||||
// EMV_CHARGE_OFF_DEINIT;
|
||||
// DelayUs(200);
|
||||
|
||||
EMV_CHARGE_EN;
|
||||
|
||||
logDebug("EMV_CHARGE_EN");
|
||||
|
||||
// 开始一个定时event,1s后产生,当前语句只会产生一次event
|
||||
|
@ -415,19 +534,69 @@ static uint16_t VAVLE_Task_ProcessEvent(uint8_t task_id, uint16_t events)
|
|||
logDebug("VAVLE_CLOSE_END_EVT");
|
||||
return (events ^ VAVLE_CLOSE_END_EVT);
|
||||
}
|
||||
// 开始测量电磁铁电感
|
||||
if (events & VAVLE_DECT_SWITCH_START_EVT)
|
||||
{
|
||||
valve_switch_dect_flag = 0;
|
||||
logDebug("VAVLE_DECT_SWITCH_START_EVT");
|
||||
VavleDect_Start();
|
||||
tmos_start_task(vavle_task_id, VAVLE_DECT_SWITCH_END_EVT, MS1_TO_SYSTEM_TIME(10));
|
||||
return (events ^ VAVLE_DECT_SWITCH_START_EVT);
|
||||
}
|
||||
if (events & VAVLE_DECT_SWITCH_END_EVT)
|
||||
{
|
||||
logDebug("VAVLE_DECT_SWITCH_END_EVT");
|
||||
|
||||
valve_switch_freq = VavleDect_GetFreq();
|
||||
logDebug("valve_switch_freq = 04%d Hz", valve_switch_freq);
|
||||
VavleDect_Switch();
|
||||
valve_switch_dect_flag = 1;
|
||||
|
||||
// logDebug("LED显示状态");
|
||||
// // tmos_set_event(led_task_id, LED_SHOW_START_EVT);
|
||||
// BSP_BlockSleep();
|
||||
// BSP_RequestBoost();
|
||||
// DelayMs(1);
|
||||
// ShowLed();
|
||||
|
||||
return (events ^ VAVLE_DECT_SWITCH_END_EVT);
|
||||
}
|
||||
if (events & VAVLE_DECT_SWITCH_CALIB_EVT)
|
||||
{
|
||||
logDebug("VAVLE_DECT_SWITCH_CALIB_EVT");
|
||||
|
||||
return (events ^ VAVLE_DECT_SWITCH_CALIB_EVT);
|
||||
}
|
||||
|
||||
if (events & VAVLE_LOW_VBAT_ALARM_EVT)
|
||||
{
|
||||
logDebug("VAVLE_LOW_VBAT_ALARM_EVT");
|
||||
|
||||
tmos_set_event(vavle_task_id, VAVLE_CLOSE_START_EVT);
|
||||
// BSP_BlockSleep();
|
||||
// BSP_RequestBoost();
|
||||
|
||||
// LED_ALL_OFF_DEINIT;
|
||||
// LED_Y_ON;
|
||||
|
||||
// BEEP_ON;
|
||||
|
||||
// DelayMs(10);
|
||||
|
||||
// LED_ALL_OFF_DEINIT;
|
||||
// BEEP_OFF_DEINIT;
|
||||
|
||||
// BSP_NoNeedBoost();
|
||||
// BSP_RequestSleep();
|
||||
|
||||
// tmos_set_event(vavle_task_id, VAVLE_CLOSE_START_EVT);
|
||||
|
||||
// tmos_start_task(vavle_task_id, VAVLE_LOW_VBAT_ALARM_EVT, MS1_TO_SYSTEM_TIME(VALVE_LOW_VBAT_ALARM_PERIOD_MS));
|
||||
|
||||
return (events ^ VAVLE_LOW_VBAT_ALARM_EVT);
|
||||
}
|
||||
if (events & VAVLE_DECT_EVT)
|
||||
if (events & VAVLE_LOOP_DECT_EVT)
|
||||
{
|
||||
logDebug("VAVLE_DECT_EVT");
|
||||
logDebug("VAVLE_LOOP_DECT_EVT");
|
||||
|
||||
gValveData.bat = BSP_ReadVbat();
|
||||
|
||||
|
@ -441,9 +610,9 @@ static uint16_t VAVLE_Task_ProcessEvent(uint8_t task_id, uint16_t events)
|
|||
{
|
||||
tmos_set_event(vavle_task_id, VAVLE_LOW_VBAT_ALARM_EVT);
|
||||
}
|
||||
tmos_start_task(vavle_task_id, VAVLE_DECT_EVT, MS1_TO_SYSTEM_TIME(VALVE_DECT_PERIOD_MS));
|
||||
tmos_start_task(vavle_task_id, VAVLE_LOOP_DECT_EVT, MS1_TO_SYSTEM_TIME(VALVE_DECT_PERIOD_MS));
|
||||
|
||||
return (events ^ VAVLE_DECT_EVT);
|
||||
return (events ^ VAVLE_LOOP_DECT_EVT);
|
||||
}
|
||||
|
||||
// Discard unknown events
|
||||
|
@ -468,7 +637,42 @@ void BSP_VAVLE_Init(void)
|
|||
// //立即开始一个event
|
||||
// tmos_set_event(vavle_task_id, VAVLE_RX_DATA_EVT);
|
||||
|
||||
tmos_start_task(vavle_task_id, VAVLE_DECT_EVT, MS1_TO_SYSTEM_TIME(VALVE_DECT_PERIOD_MS));
|
||||
// PA2
|
||||
/* 定时器3,CAP捕捉, */
|
||||
GPIOA_ResetBits(GPIO_Pin_2);
|
||||
GPIOA_ModeCfg(GPIO_Pin_2, GPIO_ModeIN_PU);
|
||||
|
||||
// TMR3功能引脚映射选择位:
|
||||
// 1:TMR3_/PWM3_/CAP3_映射到PA[2];
|
||||
R16_PIN_ALTERNATE |= (1 << 3);
|
||||
|
||||
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
|
||||
|
||||
tmos_start_task(vavle_task_id, VAVLE_LOOP_DECT_EVT, MS1_TO_SYSTEM_TIME(VALVE_DECT_PERIOD_MS));
|
||||
|
||||
logInfo("BSP_Valve_Init");
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*********************************************************************
|
||||
* @fn TMR3_IRQHandler
|
||||
*
|
||||
* @brief TMR3中断函数
|
||||
*
|
||||
* @return none
|
||||
*/
|
||||
__INTERRUPT
|
||||
__HIGH_CODE
|
||||
void TMR3_IRQHandler(void) // TMR3 定时中断
|
||||
{
|
||||
if (TMR3_GetITFlag(TMR0_3_IT_DMA_END))
|
||||
{
|
||||
TMR3_ITCfg(DISABLE, TMR0_3_IT_DMA_END); // 使用单次DMA功能+中断,注意完成后关闭此中断使能,否则会一直上报中断。
|
||||
TMR3_ClearITFlag(TMR0_3_IT_DMA_END); // 清除中断标志
|
||||
cap_flag = 1;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue