commit
0f75f951b7
|
|
@ -1,6 +1,10 @@
|
||||||
{
|
{
|
||||||
"files.associations": {
|
"files.associations": {
|
||||||
"ens1_gpio.h": "c",
|
"ens1_gpio.h": "c",
|
||||||
"ens1_boost.h": "c"
|
"ens1_boost.h": "c",
|
||||||
|
"ens_current_calibration.h": "c",
|
||||||
|
"ens1_timer.h": "c",
|
||||||
|
"my_header.h": "c",
|
||||||
|
"ens1_wavegen.h": "c"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -197,6 +197,54 @@
|
||||||
<ExecCommand></ExecCommand>
|
<ExecCommand></ExecCommand>
|
||||||
<Expression>\\ENS001_BASIC_PRJ\USER/mian.c\36</Expression>
|
<Expression>\\ENS001_BASIC_PRJ\USER/mian.c\36</Expression>
|
||||||
</Bp>
|
</Bp>
|
||||||
|
<Bp>
|
||||||
|
<Number>3</Number>
|
||||||
|
<Type>0</Type>
|
||||||
|
<LineNumber>430</LineNumber>
|
||||||
|
<EnabledFlag>1</EnabledFlag>
|
||||||
|
<Address>0</Address>
|
||||||
|
<ByteObject>0</ByteObject>
|
||||||
|
<HtxType>0</HtxType>
|
||||||
|
<ManyObjects>0</ManyObjects>
|
||||||
|
<SizeOfObject>0</SizeOfObject>
|
||||||
|
<BreakByAccess>0</BreakByAccess>
|
||||||
|
<BreakIfRCount>0</BreakIfRCount>
|
||||||
|
<Filename>.\FWLIB\source\ENS1_TIMER.c</Filename>
|
||||||
|
<ExecCommand></ExecCommand>
|
||||||
|
<Expression></Expression>
|
||||||
|
</Bp>
|
||||||
|
<Bp>
|
||||||
|
<Number>4</Number>
|
||||||
|
<Type>0</Type>
|
||||||
|
<LineNumber>431</LineNumber>
|
||||||
|
<EnabledFlag>1</EnabledFlag>
|
||||||
|
<Address>0</Address>
|
||||||
|
<ByteObject>0</ByteObject>
|
||||||
|
<HtxType>0</HtxType>
|
||||||
|
<ManyObjects>0</ManyObjects>
|
||||||
|
<SizeOfObject>0</SizeOfObject>
|
||||||
|
<BreakByAccess>0</BreakByAccess>
|
||||||
|
<BreakIfRCount>0</BreakIfRCount>
|
||||||
|
<Filename>.\FWLIB\source\ENS1_TIMER.c</Filename>
|
||||||
|
<ExecCommand></ExecCommand>
|
||||||
|
<Expression></Expression>
|
||||||
|
</Bp>
|
||||||
|
<Bp>
|
||||||
|
<Number>5</Number>
|
||||||
|
<Type>0</Type>
|
||||||
|
<LineNumber>410</LineNumber>
|
||||||
|
<EnabledFlag>1</EnabledFlag>
|
||||||
|
<Address>0</Address>
|
||||||
|
<ByteObject>0</ByteObject>
|
||||||
|
<HtxType>0</HtxType>
|
||||||
|
<ManyObjects>0</ManyObjects>
|
||||||
|
<SizeOfObject>0</SizeOfObject>
|
||||||
|
<BreakByAccess>0</BreakByAccess>
|
||||||
|
<BreakIfRCount>0</BreakIfRCount>
|
||||||
|
<Filename>.\FWLIB\source\ENS1_TIMER.c</Filename>
|
||||||
|
<ExecCommand></ExecCommand>
|
||||||
|
<Expression></Expression>
|
||||||
|
</Bp>
|
||||||
</Breakpoint>
|
</Breakpoint>
|
||||||
<WatchWindow1>
|
<WatchWindow1>
|
||||||
<Ww>
|
<Ww>
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,11 @@
|
||||||
#define ENS1_TIMER_H
|
#define ENS1_TIMER_H
|
||||||
#include "CMSDK_CM0.h"
|
#include "CMSDK_CM0.h"
|
||||||
#include "my_header.h"
|
#include "my_header.h"
|
||||||
|
extern uint8_t ems_control_count; // 电刺激控制计数器
|
||||||
|
extern uint8_t ems_state ; // 电刺激状态:0=关闭,1=开启
|
||||||
// 时间管理标志位结构体
|
// 时间管理标志位结构体
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
uint8_t T_1ms; // 1ms周期标志
|
||||||
uint8_t T_2ms; // 2ms周期标志
|
uint8_t T_2ms; // 2ms周期标志
|
||||||
uint8_t T_6ms; // 6ms周期标志
|
uint8_t T_6ms; // 6ms周期标志
|
||||||
uint8_t T_10ms; // 10ms周期标志
|
uint8_t T_10ms; // 10ms周期标志
|
||||||
|
|
@ -15,6 +17,7 @@ typedef struct {
|
||||||
|
|
||||||
// 时间管理计数器结构体
|
// 时间管理计数器结构体
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
uint8_t t_1ms; // 1ms计数器
|
||||||
uint8_t t_2ms; // 2ms计数器
|
uint8_t t_2ms; // 2ms计数器
|
||||||
uint8_t t_6ms; // 6ms计数器
|
uint8_t t_6ms; // 6ms计数器
|
||||||
uint8_t t_10ms; // 10ms计数器
|
uint8_t t_10ms; // 10ms计数器
|
||||||
|
|
@ -58,7 +61,7 @@ extern void CMSDK_dualtimer_setup_oneshot(CMSDK_DUALTIMER_TypeDef *CMSDK_DUALTIM
|
||||||
extern void CMSDK_RTC_Init_Calender(uint16_t prescaler, uint8_t data_mode, uint8_t hour_mode, uint32_t init_time, uint32_t init_date);
|
extern void CMSDK_RTC_Init_Calender(uint16_t prescaler, uint8_t data_mode, uint8_t hour_mode, uint32_t init_time, uint32_t init_date);
|
||||||
extern void CMSDK_RTC_Config_Alarm(uint16_t prescaler, uint8_t data_mode, uint8_t hour_mode, uint32_t init_time, uint32_t init_date, uint32_t alarm_time, uint32_t alarm_date) ;
|
extern void CMSDK_RTC_Config_Alarm(uint16_t prescaler, uint8_t data_mode, uint8_t hour_mode, uint32_t init_time, uint32_t init_date, uint32_t alarm_time, uint32_t alarm_date) ;
|
||||||
extern void CMSDK_RTC_Config_PeriodWake(uint8_t clock_sel, uint16_t prescaler, uint16_t period_time);
|
extern void CMSDK_RTC_Config_PeriodWake(uint8_t clock_sel, uint16_t prescaler, uint16_t period_time);
|
||||||
|
extern void Fuse_result(void);
|
||||||
// 时间管理函数声明
|
// 时间管理函数声明
|
||||||
extern void Time_Manager_Init(void);
|
extern void Time_Manager_Init(void);
|
||||||
extern void Time_Manager_Process(void);
|
extern void Time_Manager_Process(void);
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,9 @@ typedef struct {
|
||||||
uint8_t ramp_down_time; // 缓出时间:2秒
|
uint8_t ramp_down_time; // 缓出时间:2秒
|
||||||
uint8_t enable_ramp; // 启用渐进控制
|
uint8_t enable_ramp; // 启用渐进控制
|
||||||
} EMS_Config_TypeDef;
|
} EMS_Config_TypeDef;
|
||||||
|
extern uint16_t time_count;
|
||||||
|
extern float waves_per_step;
|
||||||
|
extern EMS_Config_TypeDef g_ems_config;
|
||||||
// 电刺激控制函数
|
// 电刺激控制函数
|
||||||
void EMS_Configure(EMS_Config_TypeDef *config);
|
void EMS_Configure(EMS_Config_TypeDef *config);
|
||||||
void EMS_Start(void);
|
void EMS_Start(void);
|
||||||
|
|
@ -57,5 +59,5 @@ void EMS_Stop(void);
|
||||||
void EMS_UpdateIntensity(uint16_t intensity);
|
void EMS_UpdateIntensity(uint16_t intensity);
|
||||||
void EMS_Process(void);
|
void EMS_Process(void);
|
||||||
void EMS_Process_Ramp(void); // 缓进缓出处理函数
|
void EMS_Process_Ramp(void); // 缓进缓出处理函数
|
||||||
|
extern EMS_Config_TypeDef ems_config;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -2,19 +2,19 @@
|
||||||
#include "ENS_CURRENT_CALIBRATION.h"
|
#include "ENS_CURRENT_CALIBRATION.h"
|
||||||
#include "ENS1_CLOCK.h"
|
#include "ENS1_CLOCK.h"
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
uint8_t ems_control_count = 0; // 电刺激控制计数器
|
||||||
void TIMER0_Init(uint32_t Int_Period) //定时器中断周期 单位ms
|
uint8_t ems_state = 0; // 电刺激状态:0=关闭,1=开启
|
||||||
|
uint16_t time_count = 0;
|
||||||
|
void TIMER0_Init(uint32_t Int_Period) //形参,输入中断触发周期 (单位ms)
|
||||||
{
|
{
|
||||||
PCLK_Enable(TIMER0_PCLK_EN);
|
PCLK_Enable(TIMER0_PCLK_EN);
|
||||||
NVIC_DisableIRQ(TIMER0_IRQn);
|
NVIC_DisableIRQ(TIMER0_IRQn);
|
||||||
NVIC_ClearPendingIRQ(TIMER0_IRQn);
|
NVIC_ClearPendingIRQ(TIMER0_IRQn);
|
||||||
|
CMSDK_timer_Init(CMSDK_TIMER0,(uint32_t)(APB_Clock_Freq / 1000 *Int_Period) , 1); //
|
||||||
uint32_t reload_value = (uint32_t)(APB_Clock_Freq / 1000 * Int_Period);
|
|
||||||
|
|
||||||
CMSDK_timer_Init(CMSDK_TIMER0, reload_value, 1); //
|
|
||||||
NVIC_EnableIRQ(TIMER0_IRQn);
|
NVIC_EnableIRQ(TIMER0_IRQn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void TIMER1_Init(uint32_t Int_Period)
|
void TIMER1_Init(uint32_t Int_Period)
|
||||||
{
|
{
|
||||||
PCLK_Enable(TIMER1_PCLK_EN);
|
PCLK_Enable(TIMER1_PCLK_EN);
|
||||||
|
|
@ -376,6 +376,69 @@ void CMSDK_timer_Init_ExtEnable(CMSDK_TIMER_TypeDef *CMSDK_TIMER, uint32_t reloa
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Fuse_result(void)
|
||||||
|
{
|
||||||
|
// 获取时间标志位
|
||||||
|
Time_Flag_TypeDef* time_flags = Time_Manager_GetFlags();
|
||||||
|
|
||||||
|
// 处理电刺激(在主循环中运行)
|
||||||
|
// 注意:这里不再直接调用EMS_Process(),而是通过状态控制
|
||||||
|
if (time_flags->T_1ms) {
|
||||||
|
// 1ms周期任务 - 高频控制任务
|
||||||
|
|
||||||
|
EMS_Process();
|
||||||
|
time_flags->T_1ms = 0; // 清除标志位
|
||||||
|
}
|
||||||
|
|
||||||
|
// 基于时间标志位执行不同周期的任务
|
||||||
|
if (time_flags->T_2ms) {
|
||||||
|
// 2ms周期任务 - 高频控制任务
|
||||||
|
time_flags->T_2ms = 0; // 清除标志位
|
||||||
|
}
|
||||||
|
|
||||||
|
if (time_flags->T_10ms) {
|
||||||
|
// 10ms周期任务 - 中频控制任务
|
||||||
|
time_flags->T_10ms = 0; // 清除标志位
|
||||||
|
}
|
||||||
|
|
||||||
|
if (time_flags->T_100ms) {
|
||||||
|
// 100ms周期任务 - 低频控制任务
|
||||||
|
time_flags->T_100ms = 0; // 清除标志位
|
||||||
|
}
|
||||||
|
|
||||||
|
if (time_flags->T_1s) {
|
||||||
|
GPIO_Overturn(GPIO_19);
|
||||||
|
// 1s周期任务 - 超低频任务
|
||||||
|
ems_control_count++; // 每秒递增计数器
|
||||||
|
|
||||||
|
|
||||||
|
// 间断性放电控制逻辑
|
||||||
|
if (ems_control_count <= 10) {
|
||||||
|
// 前10秒:开启电刺激
|
||||||
|
if (ems_state == 0) {
|
||||||
|
ems_state = 1;
|
||||||
|
time_count = 0; // 重置时间计数器
|
||||||
|
EMS_Start(); // 启动电刺激
|
||||||
|
}
|
||||||
|
// 处理电刺激
|
||||||
|
|
||||||
|
} else if (ems_control_count <= 20) {
|
||||||
|
// 后10秒:关闭电刺激
|
||||||
|
if (ems_state == 1) {
|
||||||
|
ems_state = 0;
|
||||||
|
time_count = 0; // 重置时间计数器
|
||||||
|
EMS_Stop(); // 停止电刺激
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 重置计数器,开始新的周期
|
||||||
|
ems_control_count = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
time_flags->T_1s = 0; // 清除标志位
|
||||||
|
}
|
||||||
|
// 定时器中断处理在 TIMER0_Handler() 中
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -406,6 +469,7 @@ void Time_Manager_Init(void)
|
||||||
void Time_Manager_Process(void)
|
void Time_Manager_Process(void)
|
||||||
{
|
{
|
||||||
// 所有计数器递增
|
// 所有计数器递增
|
||||||
|
g_time_counters.t_1ms++;
|
||||||
g_time_counters.t_2ms++;
|
g_time_counters.t_2ms++;
|
||||||
g_time_counters.t_6ms++;
|
g_time_counters.t_6ms++;
|
||||||
g_time_counters.t_10ms++;
|
g_time_counters.t_10ms++;
|
||||||
|
|
@ -414,6 +478,13 @@ void Time_Manager_Process(void)
|
||||||
g_time_counters.t_1s++;
|
g_time_counters.t_1s++;
|
||||||
|
|
||||||
// 2ms控制周期
|
// 2ms控制周期
|
||||||
|
if (g_time_counters.t_1ms >= 1)
|
||||||
|
{
|
||||||
|
g_time_counters.t_1ms = 0;
|
||||||
|
g_time_flags.T_1ms = 1;
|
||||||
|
/* code */
|
||||||
|
}
|
||||||
|
|
||||||
if (g_time_counters.t_2ms >= 2) {
|
if (g_time_counters.t_2ms >= 2) {
|
||||||
g_time_counters.t_2ms = 0;
|
g_time_counters.t_2ms = 0;
|
||||||
g_time_flags.T_2ms = 1;
|
g_time_flags.T_2ms = 1;
|
||||||
|
|
@ -448,6 +519,7 @@ void Time_Manager_Process(void)
|
||||||
g_time_counters.t_1s = 0;
|
g_time_counters.t_1s = 0;
|
||||||
g_time_flags.T_1s = 1;
|
g_time_flags.T_1s = 1;
|
||||||
}
|
}
|
||||||
|
Fuse_result();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -483,7 +555,6 @@ uint32_t time_flag =0;
|
||||||
void TIMER0_Handler(void){
|
void TIMER0_Handler(void){
|
||||||
CMSDK_TIMER0->INTCLEAR = 1;
|
CMSDK_TIMER0->INTCLEAR = 1;
|
||||||
timer0_irq_occurred++;
|
timer0_irq_occurred++;
|
||||||
|
|
||||||
// 调用时间管理处理函数
|
// 调用时间管理处理函数
|
||||||
Time_Manager_Process();
|
Time_Manager_Process();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,14 +21,26 @@ Modification: 初版
|
||||||
#include "ENS1_WAVEGEN.h"
|
#include "ENS1_WAVEGEN.h"
|
||||||
#include "ENS1_CLOCK.h"
|
#include "ENS1_CLOCK.h"
|
||||||
#include "ENS1_BOOST.h"
|
#include "ENS1_BOOST.h"
|
||||||
|
EMS_Config_TypeDef ems_config = {
|
||||||
|
.frequency = 100, // 100Hz
|
||||||
|
.duration = 1000, // 1000ms
|
||||||
|
.intensity = 128, // 中等强度
|
||||||
|
.rest_time = 100, // 100ms休息时间
|
||||||
|
.silent_time = 50, // 50ms静默时间
|
||||||
|
|
||||||
|
// 缓进缓出控制参数
|
||||||
|
.ramp_up_time = 2, // 缓进时间:2秒
|
||||||
|
.hold_time = 6, // 保持时间:6秒
|
||||||
|
.ramp_down_time = 2, // 缓出时间:2秒·
|
||||||
|
.enable_ramp = 1 // 启用渐进控制
|
||||||
|
};
|
||||||
// 全局变量
|
// 全局变量
|
||||||
static EMS_Config_TypeDef g_ems_config = {0};
|
EMS_Config_TypeDef g_ems_config = {0};
|
||||||
static volatile uint8_t g_ems_running = 0;
|
static volatile uint8_t g_ems_running = 0;
|
||||||
static volatile uint32_t g_ems_count = 0;
|
static volatile uint32_t g_ems_count = 0;
|
||||||
|
float waves_per_step = 0;
|
||||||
// 缓进缓出控制变量
|
// 缓进缓出控制变量
|
||||||
static volatile uint16_t g_current_intensity = 0; // 当前强度
|
static volatile float g_current_intensity = 0; // 当前强度
|
||||||
static volatile uint8_t g_ramp_phase = 0; // 渐进阶段:0=缓进, 1=保持, 2=缓出
|
static volatile uint8_t g_ramp_phase = 0; // 渐进阶段:0=缓进, 1=保持, 2=缓出
|
||||||
static volatile uint32_t g_wave_counter = 0; // 方波周期计数器
|
static volatile uint32_t g_wave_counter = 0; // 方波周期计数器
|
||||||
static volatile uint32_t g_ramp_step_counter = 0; // 缓进步进计数器
|
static volatile uint32_t g_ramp_step_counter = 0; // 缓进步进计数器
|
||||||
|
|
@ -41,7 +53,7 @@ int wavegen_driverA_sine_test(CMSDK_WAVE_GEN_TypeDef *CMSDK_WAVEGEN_DRVA, uint16
|
||||||
int return_val = 0;
|
int return_val = 0;
|
||||||
int err_code = 0;
|
int err_code = 0;
|
||||||
|
|
||||||
printf("\n驱动器A正弦波测试\n");
|
// printf("\n驱动器A正弦波测试\n");
|
||||||
|
|
||||||
CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_REST_T_REG = 100; // 死区时间10ms //交替模式下,死区时间失效,即使CONFIG_REG使能了死区时间也无效
|
CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_REST_T_REG = 100; // 死区时间10ms //交替模式下,死区时间失效,即使CONFIG_REG使能了死区时间也无效
|
||||||
// CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_SILENT_T_REG = 200; //静默时间20ms
|
// CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_SILENT_T_REG = 200; //静默时间20ms
|
||||||
|
|
@ -101,12 +113,12 @@ int wavegen_driverA_sine_test(CMSDK_WAVE_GEN_TypeDef *CMSDK_WAVEGEN_DRVA, uint16
|
||||||
CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_CTRL_REG = 0x00000001; // 使能驱动器
|
CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_CTRL_REG = 0x00000001; // 使能驱动器
|
||||||
|
|
||||||
/* 生成返回值 */
|
/* 生成返回值 */
|
||||||
if (err_code != 0)
|
/*if (err_code != 0)
|
||||||
{
|
{
|
||||||
printf("\n错误 : 驱动器A测试失败\n");
|
printf("\n错误 : 驱动器A测试失败\n");
|
||||||
return_val = 1;
|
return_val = 1;
|
||||||
err_code = 0;
|
err_code = 0;
|
||||||
}
|
}*/
|
||||||
|
|
||||||
return (return_val);
|
return (return_val);
|
||||||
}
|
}
|
||||||
|
|
@ -147,7 +159,6 @@ void wavegen_Init(void)
|
||||||
void wavegen_Start(void)
|
void wavegen_Start(void)
|
||||||
{
|
{
|
||||||
g_ems_running = 1;
|
g_ems_running = 1;
|
||||||
g_ems_count = 0;
|
|
||||||
|
|
||||||
// 初始化缓进缓出控制
|
// 初始化缓进缓出控制
|
||||||
if (g_ems_config.enable_ramp)
|
if (g_ems_config.enable_ramp)
|
||||||
|
|
@ -161,6 +172,9 @@ void wavegen_Start(void)
|
||||||
{
|
{
|
||||||
g_current_intensity = g_ems_config.intensity; // 直接使用设定强度
|
g_current_intensity = g_ems_config.intensity; // 直接使用设定强度
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 初始化硬件配置(只执行一次)
|
||||||
|
wavegen_driverA_sine_test(WAVE_GEN_DRVA_BLK0, g_current_intensity);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 电刺激参数配置
|
// 电刺激参数配置
|
||||||
|
|
@ -182,7 +196,6 @@ void EMS_Start(void)
|
||||||
void EMS_Stop(void)
|
void EMS_Stop(void)
|
||||||
{
|
{
|
||||||
g_ems_running = 0;
|
g_ems_running = 0;
|
||||||
g_ems_count = 0; // 重置计数器
|
|
||||||
g_current_intensity = 0; // 重置强度
|
g_current_intensity = 0; // 重置强度
|
||||||
g_ramp_phase = 0; // 重置渐进阶段
|
g_ramp_phase = 0; // 重置渐进阶段
|
||||||
g_wave_counter = 0; // 重置方波计数器
|
g_wave_counter = 0; // 重置方波计数器
|
||||||
|
|
@ -199,89 +212,93 @@ void EMS_UpdateIntensity(uint16_t intensity)
|
||||||
// 缓进缓出处理函数(在电刺激处理中调用)
|
// 缓进缓出处理函数(在电刺激处理中调用)
|
||||||
void EMS_Process_Ramp(void)
|
void EMS_Process_Ramp(void)
|
||||||
{
|
{
|
||||||
if (!g_ems_config.enable_ramp || !g_ems_running)
|
if(ems_state)
|
||||||
{
|
{
|
||||||
return; // 如果未启用缓进缓出或未运行,直接返回
|
time_count++;
|
||||||
}
|
if (!g_ems_config.enable_ramp || !g_ems_running)
|
||||||
|
|
||||||
// 计算每个强度步进需要的方波周期数
|
|
||||||
// 2秒 = 2000000微秒,每个方波周期100微秒,所以2秒内有20000个方波周期
|
|
||||||
// 需要从0增加到128,所以每156.25个方波周期增加1个强度单位
|
|
||||||
uint32_t waves_per_step = 0;
|
|
||||||
uint32_t total_waves_ramp_up = g_ems_config.ramp_up_time * 5; // 缓进阶段总方波周期数
|
|
||||||
uint32_t total_waves_ramp_down = g_ems_config.ramp_down_time * 1; // 缓出阶段总方波周期数
|
|
||||||
uint32_t total_waves_hold = g_ems_config.hold_time * 5; // 保持阶段总方波周期数
|
|
||||||
|
|
||||||
if (g_ems_config.intensity > 0)
|
|
||||||
{
|
|
||||||
waves_per_step = total_waves_ramp_up / g_ems_config.intensity; // 每个强度步进需要的方波周期数
|
|
||||||
}
|
|
||||||
|
|
||||||
g_wave_counter++; // 每次调用增加一个方波周期计数
|
|
||||||
|
|
||||||
switch (g_ramp_phase)
|
|
||||||
{
|
|
||||||
case 0: // 缓进阶段
|
|
||||||
if (g_ramp_step_counter < total_waves_ramp_up)
|
|
||||||
{
|
{
|
||||||
// 检查是否需要增加强度
|
return; // 如果未启用缓进缓出或未运行,直接返回
|
||||||
if (g_wave_counter >= waves_per_step)
|
}
|
||||||
|
|
||||||
|
// 计算每个强度步进需要的毫秒数
|
||||||
|
uint32_t ramp_up_ms = ems_config.ramp_up_time * 1000;
|
||||||
|
uint32_t hold_ms = ems_config.hold_time * 1000;
|
||||||
|
uint32_t ramp_down_ms = ems_config.ramp_down_time * 1000;
|
||||||
|
|
||||||
|
switch (g_ramp_phase)
|
||||||
|
{
|
||||||
|
case 0: // 缓进阶段
|
||||||
{
|
{
|
||||||
g_wave_counter = 0; // 重置方波计数器
|
|
||||||
if (g_current_intensity < g_ems_config.intensity)
|
if ( time_count <= ems_config.ramp_up_time*1000 )
|
||||||
{
|
{
|
||||||
g_current_intensity++;
|
// 计算当前应该达到的强度
|
||||||
|
uint16_t target_intensity = (time_count * ems_config.intensity) / ramp_up_ms;
|
||||||
|
if (target_intensity > ems_config.intensity) {
|
||||||
|
target_intensity = ems_config.intensity;
|
||||||
|
}
|
||||||
|
g_current_intensity = target_intensity;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 缓进完成,进入保持阶段
|
||||||
|
g_ramp_phase = 1;
|
||||||
|
g_current_intensity = ems_config.intensity; // 确保达到最大强度
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
g_ramp_step_counter++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// 缓进完成,进入保持阶段
|
|
||||||
g_ramp_phase = 1;
|
|
||||||
g_ramp_step_counter = 0;
|
|
||||||
g_current_intensity = g_ems_config.intensity; // 确保达到最大强度
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 1: // 保持阶段
|
case 1: // 保持阶段
|
||||||
if (g_ramp_step_counter < total_waves_hold)
|
|
||||||
{
|
|
||||||
// 保持最大强度
|
|
||||||
g_current_intensity = g_ems_config.intensity;
|
|
||||||
g_ramp_step_counter++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// 保持完成,进入缓出阶段
|
|
||||||
g_ramp_phase = 2;
|
|
||||||
g_ramp_step_counter = 0;
|
|
||||||
g_wave_counter = 0; // 重置方波计数器
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 2: // 缓出阶段
|
|
||||||
if (g_ramp_step_counter < total_waves_ramp_down)
|
|
||||||
{
|
|
||||||
// 检查是否需要减少强度
|
|
||||||
if (g_wave_counter >= waves_per_step)
|
|
||||||
{
|
{
|
||||||
g_wave_counter = 0; // 重置方波计数器
|
if(time_count <= (ramp_up_ms + hold_ms))
|
||||||
if (g_current_intensity > 0)
|
|
||||||
{
|
{
|
||||||
g_current_intensity--;
|
g_current_intensity = ems_config.intensity;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
g_ramp_phase = 2;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
g_ramp_step_counter++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// 缓出完成,停止电刺激
|
|
||||||
g_current_intensity = 0;
|
|
||||||
|
|
||||||
// 这里不直接停止,让主循环控制停止
|
case 2: // 缓出阶段
|
||||||
|
{
|
||||||
|
if(time_count <= (ramp_up_ms + hold_ms + ramp_down_ms))
|
||||||
|
{
|
||||||
|
// 计算缓出阶段的时间偏移
|
||||||
|
uint32_t ramp_down_start = ramp_up_ms + hold_ms;
|
||||||
|
uint32_t ramp_down_elapsed = time_count - ramp_down_start;
|
||||||
|
|
||||||
|
// 计算当前应该达到的强度(从最大值递减到0)
|
||||||
|
uint16_t target_intensity = ems_config.intensity -
|
||||||
|
(ramp_down_elapsed * ems_config.intensity) / ramp_down_ms;
|
||||||
|
|
||||||
|
if (target_intensity > ems_config.intensity) {
|
||||||
|
target_intensity = 0;
|
||||||
|
}
|
||||||
|
g_current_intensity = target_intensity;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 缓出完成,停止电刺激
|
||||||
|
g_current_intensity = 0;
|
||||||
|
g_ramp_phase = 0; // 重置为缓进阶段,准备下一轮
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
}
|
||||||
|
// 注意:不要在这里重置time_count,让它继续计数
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新波形强度(不重新配置硬件)
|
||||||
|
void wavegen_UpdateIntensity(CMSDK_WAVE_GEN_TypeDef *CMSDK_WAVEGEN_DRVA, uint16_t intensity)
|
||||||
|
{
|
||||||
|
// 只更新波形数据,不重新配置硬件
|
||||||
|
for (int i = 0; i < 64; i++)
|
||||||
|
{
|
||||||
|
CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_IN_WAVE_ADDR_REG = i;
|
||||||
|
CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_IN_WAVE_REG = intensity;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -290,31 +307,9 @@ void EMS_Process(void)
|
||||||
{
|
{
|
||||||
if (g_ems_running)
|
if (g_ems_running)
|
||||||
{
|
{
|
||||||
g_ems_count++;
|
EMS_Process_Ramp();
|
||||||
|
|
||||||
// 处理缓进缓出控制
|
|
||||||
EMS_Process_Ramp();
|
|
||||||
|
|
||||||
// 使用当前缓进缓出的强度
|
// 使用当前缓进缓出的强度
|
||||||
uint16_t current_intensity = g_current_intensity;
|
uint16_t current_intensity = g_current_intensity;
|
||||||
|
wavegen_UpdateIntensity(WAVE_GEN_DRVA_BLK0, current_intensity);
|
||||||
// 根据配置生成不同强度的方波
|
|
||||||
if (g_ems_count < 1280)
|
|
||||||
{
|
|
||||||
wavegen_driverA_sine_test(WAVE_GEN_DRVA_BLK0, current_intensity);
|
|
||||||
}
|
|
||||||
else if (g_ems_count < 1280 * 256)
|
|
||||||
{
|
|
||||||
// 休息时间
|
|
||||||
}
|
|
||||||
else if (g_ems_count < 1280 * 2)
|
|
||||||
{
|
|
||||||
wavegen_driverA_sine_test(WAVE_GEN_DRVA_BLK0, current_intensity);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// 重置计数器,开始新的周期
|
|
||||||
g_ems_count = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
4963
JLinkLog.txt
4963
JLinkLog.txt
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
|
@ -21,27 +21,31 @@ Target DLL: Segger\JL2CM3.dll V2.99.42.0
|
||||||
Dialog DLL: TARMCM1.DLL V1.14.6.0
|
Dialog DLL: TARMCM1.DLL V1.14.6.0
|
||||||
|
|
||||||
<h2>Project:</h2>
|
<h2>Project:</h2>
|
||||||
E:\Workspace\TIMER_DEMO\ENS001_BASIC_PRJ.uvprojx
|
E:\WeChat Files\wxid_2yspimlbsy4d22\xwechat_files\wxid_2yspimlbsy4d22_74fb\msg\file\2025-09\TIMER_DEMO\TIMER_DEMO\ENS001_BASIC_PRJ.uvprojx
|
||||||
Project File Date: 08/15/2025
|
Project File Date: 08/15/2025
|
||||||
|
|
||||||
<h2>Output:</h2>
|
<h2>Output:</h2>
|
||||||
*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin'
|
*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin'
|
||||||
Rebuild target 'ENS001_BASIC_PRJ'
|
Build target 'ENS001_BASIC_PRJ'
|
||||||
assembling startup_CMSDK_CM0.s...
|
|
||||||
compiling mian.c...
|
compiling mian.c...
|
||||||
compiling ENS1_GPIO.c...
|
|
||||||
compiling system_CMSDK_CM0.c...
|
|
||||||
compiling retarget.c...
|
|
||||||
compiling ENS1_BOOST.c...
|
|
||||||
compiling ENS1_CLOCK.c...
|
|
||||||
compiling ENS1_MTP.c...
|
|
||||||
compiling ENS1_UART.c...
|
|
||||||
compiling ENS1_WAVEGEN.c...
|
compiling ENS1_WAVEGEN.c...
|
||||||
|
FWLIB\source\ENS1_WAVEGEN.c(54): warning: #177-D: variable "err_code" was declared but never referenced
|
||||||
|
int err_code = 0;
|
||||||
|
FWLIB\source\ENS1_WAVEGEN.c: 1 warning, 0 errors
|
||||||
compiling ENS1_TIMER.c...
|
compiling ENS1_TIMER.c...
|
||||||
|
FWLIB\source\ENS1_TIMER.c(389): warning: #223-D: function "EMS_Process" declared implicitly
|
||||||
|
EMS_Process();
|
||||||
|
FWLIB\source\ENS1_TIMER.c(410): warning: #223-D: function "GPIO_Overturn" declared implicitly
|
||||||
|
GPIO_Overturn(GPIO_19);
|
||||||
|
FWLIB\source\ENS1_TIMER.c(421): warning: #223-D: function "EMS_Start" declared implicitly
|
||||||
|
EMS_Start(); // 启动电刺激
|
||||||
|
FWLIB\source\ENS1_TIMER.c(430): warning: #223-D: function "EMS_Stop" declared implicitly
|
||||||
|
EMS_Stop(); // 停止电刺激
|
||||||
|
FWLIB\source\ENS1_TIMER.c: 4 warnings, 0 errors
|
||||||
linking...
|
linking...
|
||||||
Program Size: Code=7956 RO-data=388 RW-data=120 ZI-data=528
|
Program Size: Code=8000 RO-data=368 RW-data=132 ZI-data=532
|
||||||
FromELF: creating hex file...
|
FromELF: creating hex file...
|
||||||
".\Objects\ENS001_BASIC_PRJ.axf" - 0 Error(s), 0 Warning(s).
|
".\Objects\ENS001_BASIC_PRJ.axf" - 0 Error(s), 5 Warning(s).
|
||||||
|
|
||||||
<h2>Software Packages used:</h2>
|
<h2>Software Packages used:</h2>
|
||||||
|
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -1,7 +1,7 @@
|
||||||
Dependencies for Project 'ENS001_BASIC_PRJ', Target 'ENS001_BASIC_PRJ': (DO NOT MODIFY !)
|
Dependencies for Project 'ENS001_BASIC_PRJ', Target 'ENS001_BASIC_PRJ': (DO NOT MODIFY !)
|
||||||
CompilerVersion: 5060750::V5.06 update 6 (build 750)::.\ARM_Compiler_5.06u7
|
CompilerVersion: 5060750::V5.06 update 6 (build 750)::.\ARM_Compiler_5.06u7
|
||||||
F (.\USER\mian.c)(0x68B11E1F)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include
-ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include
-ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include
-D__UVISION_VERSION="538" -DARMCM0
-o .\objects\mian.o --omf_browse .\objects\mian.crf --depend .\objects\mian.d)
|
F (.\USER\mian.c)(0x68C23502)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include
-ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include
-ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include
-D__UVISION_VERSION="538" -DARMCM0
-o .\objects\mian.o --omf_browse .\objects\mian.crf --depend .\objects\mian.d)
|
||||||
I (USER\my_header.h)(0x68B11CC5)
|
I (USER\my_header.h)(0x68C138EC)
|
||||||
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C)
|
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C)
|
||||||
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\string.h)(0x599ECD2C)
|
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\string.h)(0x599ECD2C)
|
||||||
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\math.h)(0x599ECD2E)
|
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\math.h)(0x599ECD2E)
|
||||||
|
|
@ -11,16 +11,16 @@ I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdint.h)(0x599ECD2E)
|
||||||
I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6)
|
I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6)
|
||||||
I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6)
|
I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6)
|
||||||
I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6)
|
I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6)
|
||||||
I (.\FWLIB\include\ENS1_TIMER.h)(0x68A5333E)
|
I (.\FWLIB\include\ENS1_TIMER.h)(0x68C13790)
|
||||||
I (.\USER\my_header.h)(0x68B11CC5)
|
I (.\USER\my_header.h)(0x68C138EC)
|
||||||
I (.\FWLIB\include\ENS1_MTP.h)(0x65605CD6)
|
I (.\FWLIB\include\ENS1_MTP.h)(0x65605CD6)
|
||||||
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdlib.h)(0x599ECD2C)
|
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdlib.h)(0x599ECD2C)
|
||||||
I (.\FWLIB\include\ENS1_CLOCK.h)(0x68358097)
|
I (.\FWLIB\include\ENS1_CLOCK.h)(0x68358097)
|
||||||
I (.\FWLIB\include\ENS1_UART.h)(0x68B10579)
|
I (.\FWLIB\include\ENS1_UART.h)(0x68B10579)
|
||||||
I (.\FWLIB\include\ENS1_GPIO.h)(0x68B11DDD)
|
I (.\FWLIB\include\ENS1_GPIO.h)(0x68B11DDD)
|
||||||
I (.\FWLIB\include\ENS1_WAVEGEN.h)(0x68A53F9C)
|
I (.\FWLIB\include\ENS1_WAVEGEN.h)(0x68C14AAF)
|
||||||
F (.\FWLIB\source\ENS1_UART.c)(0x68B117BC)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include
-ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include
-ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include
-D__UVISION_VERSION="538" -DARMCM0
-o .\objects\ens1_uart.o --omf_browse .\objects\ens1_uart.crf --depend .\objects\ens1_uart.d)
|
F (.\FWLIB\source\ENS1_UART.c)(0x68B117BC)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include
-ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include
-ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include
-D__UVISION_VERSION="538" -DARMCM0
-o .\objects\ens1_uart.o --omf_browse .\objects\ens1_uart.crf --depend .\objects\ens1_uart.d)
|
||||||
I (.\USER\my_header.h)(0x68B11CC5)
|
I (.\USER\my_header.h)(0x68C138EC)
|
||||||
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C)
|
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C)
|
||||||
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\string.h)(0x599ECD2C)
|
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\string.h)(0x599ECD2C)
|
||||||
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\math.h)(0x599ECD2E)
|
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\math.h)(0x599ECD2E)
|
||||||
|
|
@ -30,12 +30,12 @@ I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdint.h)(0x599ECD2E)
|
||||||
I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6)
|
I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6)
|
||||||
I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6)
|
I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6)
|
||||||
I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6)
|
I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6)
|
||||||
I (.\FWLIB\include\ENS1_TIMER.h)(0x68A5333E)
|
I (.\FWLIB\include\ENS1_TIMER.h)(0x68C13790)
|
||||||
I (.\FWLIB\include\ENS1_UART.h)(0x68B10579)
|
I (.\FWLIB\include\ENS1_UART.h)(0x68B10579)
|
||||||
I (.\FWLIB\include\ENS1_CLOCK.h)(0x68358097)
|
I (.\FWLIB\include\ENS1_CLOCK.h)(0x68358097)
|
||||||
I (.\FWLIB\include\ENS1_GPIO.h)(0x68B11DDD)
|
I (.\FWLIB\include\ENS1_GPIO.h)(0x68B11DDD)
|
||||||
F (.\FWLIB\source\ENS1_GPIO.c)(0x689C4B85)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include
-ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include
-ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include
-D__UVISION_VERSION="538" -DARMCM0
-o .\objects\ens1_gpio.o --omf_browse .\objects\ens1_gpio.crf --depend .\objects\ens1_gpio.d)
|
F (.\FWLIB\source\ENS1_GPIO.c)(0x689C4B85)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include
-ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include
-ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include
-D__UVISION_VERSION="538" -DARMCM0
-o .\objects\ens1_gpio.o --omf_browse .\objects\ens1_gpio.crf --depend .\objects\ens1_gpio.d)
|
||||||
I (.\USER\my_header.h)(0x68B11CC5)
|
I (.\USER\my_header.h)(0x68C138EC)
|
||||||
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C)
|
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C)
|
||||||
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\string.h)(0x599ECD2C)
|
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\string.h)(0x599ECD2C)
|
||||||
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\math.h)(0x599ECD2E)
|
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\math.h)(0x599ECD2E)
|
||||||
|
|
@ -45,7 +45,7 @@ I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdint.h)(0x599ECD2E)
|
||||||
I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6)
|
I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6)
|
||||||
I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6)
|
I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6)
|
||||||
I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6)
|
I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6)
|
||||||
I (.\FWLIB\include\ENS1_TIMER.h)(0x68A5333E)
|
I (.\FWLIB\include\ENS1_TIMER.h)(0x68C13790)
|
||||||
I (.\FWLIB\include\ENS1_GPIO.h)(0x68B11DDD)
|
I (.\FWLIB\include\ENS1_GPIO.h)(0x68B11DDD)
|
||||||
F (.\FWLIB\source\ENS1_MTP.c)(0x68B10C84)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include
-ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include
-ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include
-D__UVISION_VERSION="538" -DARMCM0
-o .\objects\ens1_mtp.o --omf_browse .\objects\ens1_mtp.crf --depend .\objects\ens1_mtp.d)
|
F (.\FWLIB\source\ENS1_MTP.c)(0x68B10C84)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include
-ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include
-ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include
-D__UVISION_VERSION="538" -DARMCM0
-o .\objects\ens1_mtp.o --omf_browse .\objects\ens1_mtp.crf --depend .\objects\ens1_mtp.d)
|
||||||
I (.\FWLIB\include\ENS1_MTP.h)(0x65605CD6)
|
I (.\FWLIB\include\ENS1_MTP.h)(0x65605CD6)
|
||||||
|
|
@ -57,13 +57,13 @@ I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6)
|
||||||
I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6)
|
I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6)
|
||||||
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdlib.h)(0x599ECD2C)
|
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdlib.h)(0x599ECD2C)
|
||||||
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\string.h)(0x599ECD2C)
|
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\string.h)(0x599ECD2C)
|
||||||
I (.\USER\my_header.h)(0x68B11CC5)
|
I (.\USER\my_header.h)(0x68C138EC)
|
||||||
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C)
|
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C)
|
||||||
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\math.h)(0x599ECD2E)
|
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\math.h)(0x599ECD2E)
|
||||||
I (.\FWLIB\include\ENS1_TIMER.h)(0x68A5333E)
|
I (.\FWLIB\include\ENS1_TIMER.h)(0x68C13790)
|
||||||
F (.\FWLIB\source\ENS1_CLOCK.c)(0x68A5300C)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include
-ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include
-ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include
-D__UVISION_VERSION="538" -DARMCM0
-o .\objects\ens1_clock.o --omf_browse .\objects\ens1_clock.crf --depend .\objects\ens1_clock.d)
|
F (.\FWLIB\source\ENS1_CLOCK.c)(0x68A5300C)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include
-ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include
-ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include
-D__UVISION_VERSION="538" -DARMCM0
-o .\objects\ens1_clock.o --omf_browse .\objects\ens1_clock.crf --depend .\objects\ens1_clock.d)
|
||||||
I (.\FWLIB\include\ENS1_CLOCK.h)(0x68358097)
|
I (.\FWLIB\include\ENS1_CLOCK.h)(0x68358097)
|
||||||
I (.\USER\my_header.h)(0x68B11CC5)
|
I (.\USER\my_header.h)(0x68C138EC)
|
||||||
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C)
|
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C)
|
||||||
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\string.h)(0x599ECD2C)
|
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\string.h)(0x599ECD2C)
|
||||||
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\math.h)(0x599ECD2E)
|
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\math.h)(0x599ECD2E)
|
||||||
|
|
@ -73,7 +73,7 @@ I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdint.h)(0x599ECD2E)
|
||||||
I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6)
|
I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6)
|
||||||
I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6)
|
I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6)
|
||||||
I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6)
|
I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6)
|
||||||
I (.\FWLIB\include\ENS1_TIMER.h)(0x68A5333E)
|
I (.\FWLIB\include\ENS1_TIMER.h)(0x68C13790)
|
||||||
F (.\FWLIB\source\retarget.c)(0x6565495A)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include
-ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include
-ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include
-D__UVISION_VERSION="538" -DARMCM0
-o .\objects\retarget.o --omf_browse .\objects\retarget.crf --depend .\objects\retarget.d)
|
F (.\FWLIB\source\retarget.c)(0x6565495A)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include
-ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include
-ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include
-D__UVISION_VERSION="538" -DARMCM0
-o .\objects\retarget.o --omf_browse .\objects\retarget.crf --depend .\objects\retarget.d)
|
||||||
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C)
|
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C)
|
||||||
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\time.h)(0x599ECD2E)
|
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\time.h)(0x599ECD2E)
|
||||||
|
|
@ -85,15 +85,15 @@ I (.\CORE\INCLUDE\core_cm0.h)(0x63648DE6)
|
||||||
I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6)
|
I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6)
|
||||||
I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6)
|
I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6)
|
||||||
I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6)
|
I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6)
|
||||||
F (.\FWLIB\source\ENS1_TIMER.c)(0x68B11CB3)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include
-ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include
-ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include
-D__UVISION_VERSION="538" -DARMCM0
-o .\objects\ens1_timer.o --omf_browse .\objects\ens1_timer.crf --depend .\objects\ens1_timer.d)
|
F (.\FWLIB\source\ENS1_TIMER.c)(0x68C23503)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include
-ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include
-ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include
-D__UVISION_VERSION="538" -DARMCM0
-o .\objects\ens1_timer.o --omf_browse .\objects\ens1_timer.crf --depend .\objects\ens1_timer.d)
|
||||||
I (.\FWLIB\include\ENS1_TIMER.h)(0x68A5333E)
|
I (.\FWLIB\include\ENS1_TIMER.h)(0x68C13790)
|
||||||
I (.\CORE\INCLUDE\CMSDK_CM0.h)(0x64D5ADE8)
|
I (.\CORE\INCLUDE\CMSDK_CM0.h)(0x64D5ADE8)
|
||||||
I (.\CORE\INCLUDE\core_cm0.h)(0x63648DE6)
|
I (.\CORE\INCLUDE\core_cm0.h)(0x63648DE6)
|
||||||
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdint.h)(0x599ECD2E)
|
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdint.h)(0x599ECD2E)
|
||||||
I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6)
|
I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6)
|
||||||
I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6)
|
I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6)
|
||||||
I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6)
|
I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6)
|
||||||
I (.\USER\my_header.h)(0x68B11CC5)
|
I (.\USER\my_header.h)(0x68C138EC)
|
||||||
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C)
|
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C)
|
||||||
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\string.h)(0x599ECD2C)
|
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\string.h)(0x599ECD2C)
|
||||||
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\math.h)(0x599ECD2E)
|
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\math.h)(0x599ECD2E)
|
||||||
|
|
@ -108,19 +108,19 @@ I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdint.h)(0x599ECD2E)
|
||||||
I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6)
|
I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6)
|
||||||
I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6)
|
I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6)
|
||||||
I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6)
|
I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6)
|
||||||
F (.\FWLIB\source\ENS1_WAVEGEN.c)(0x68B11C3C)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include
-ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include
-ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include
-D__UVISION_VERSION="538" -DARMCM0
-o .\objects\ens1_wavegen.o --omf_browse .\objects\ens1_wavegen.crf --depend .\objects\ens1_wavegen.d)
|
F (.\FWLIB\source\ENS1_WAVEGEN.c)(0x68C23500)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include
-ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include
-ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include
-D__UVISION_VERSION="538" -DARMCM0
-o .\objects\ens1_wavegen.o --omf_browse .\objects\ens1_wavegen.crf --depend .\objects\ens1_wavegen.d)
|
||||||
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C)
|
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C)
|
||||||
I (.\FWLIB\include\ENS1_WAVEGEN.h)(0x68A53F9C)
|
I (.\FWLIB\include\ENS1_WAVEGEN.h)(0x68C14AAF)
|
||||||
I (.\CORE\INCLUDE\CMSDK_CM0.h)(0x64D5ADE8)
|
I (.\CORE\INCLUDE\CMSDK_CM0.h)(0x64D5ADE8)
|
||||||
I (.\CORE\INCLUDE\core_cm0.h)(0x63648DE6)
|
I (.\CORE\INCLUDE\core_cm0.h)(0x63648DE6)
|
||||||
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdint.h)(0x599ECD2E)
|
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdint.h)(0x599ECD2E)
|
||||||
I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6)
|
I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6)
|
||||||
I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6)
|
I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6)
|
||||||
I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6)
|
I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6)
|
||||||
I (.\USER\my_header.h)(0x68B11CC5)
|
I (.\USER\my_header.h)(0x68C138EC)
|
||||||
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\string.h)(0x599ECD2C)
|
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\string.h)(0x599ECD2C)
|
||||||
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\math.h)(0x599ECD2E)
|
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\math.h)(0x599ECD2E)
|
||||||
I (.\FWLIB\include\ENS1_TIMER.h)(0x68A5333E)
|
I (.\FWLIB\include\ENS1_TIMER.h)(0x68C13790)
|
||||||
I (.\FWLIB\include\ENS1_CLOCK.h)(0x68358097)
|
I (.\FWLIB\include\ENS1_CLOCK.h)(0x68358097)
|
||||||
I (.\FWLIB\include\ENS1_BOOST.h)(0x68B11D22)
|
I (.\FWLIB\include\ENS1_BOOST.h)(0x68B11D22)
|
||||||
F (.\CORE\system_CMSDK_CM0.c)(0x63648DE6)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include
-ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include
-ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include
-D__UVISION_VERSION="538" -DARMCM0
-o .\objects\system_cmsdk_cm0.o --omf_browse .\objects\system_cmsdk_cm0.crf --depend .\objects\system_cmsdk_cm0.d)
|
F (.\CORE\system_CMSDK_CM0.c)(0x63648DE6)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include
-ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include
-ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include
-D__UVISION_VERSION="538" -DARMCM0
-o .\objects\system_cmsdk_cm0.o --omf_browse .\objects\system_cmsdk_cm0.crf --depend .\objects\system_cmsdk_cm0.d)
|
||||||
|
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Objects/mian.crf
BIN
Objects/mian.crf
Binary file not shown.
BIN
Objects/mian.o
BIN
Objects/mian.o
Binary file not shown.
Binary file not shown.
Binary file not shown.
81
USER/mian.c
81
USER/mian.c
|
|
@ -22,6 +22,7 @@ Modification: 初版
|
||||||
#include "ENS1_GPIO.h"
|
#include "ENS1_GPIO.h"
|
||||||
#include "ENS1_WAVEGEN.h"
|
#include "ENS1_WAVEGEN.h"
|
||||||
|
|
||||||
|
|
||||||
int main(){
|
int main(){
|
||||||
// 初始化系统
|
// 初始化系统
|
||||||
MTP_init();
|
MTP_init();
|
||||||
|
|
@ -34,93 +35,27 @@ int main(){
|
||||||
// 初始化UART
|
// 初始化UART
|
||||||
UART_Init(CMSDK_UART1, &UART1_Init);
|
UART_Init(CMSDK_UART1, &UART1_Init);
|
||||||
UART_ITConfig(CMSDK_UART1, &UART1_ITSet);
|
UART_ITConfig(CMSDK_UART1, &UART1_ITSet);
|
||||||
|
// 配置电刺激参数
|
||||||
|
EMS_Configure(&ems_config);
|
||||||
|
// 初始化时间管理器
|
||||||
|
Time_Manager_Init();
|
||||||
// 初始化定时器(在wavegen_Init之前)
|
// 初始化定时器(在wavegen_Init之前)
|
||||||
TIMER0_Init(1);
|
TIMER0_Init(1);
|
||||||
|
|
||||||
// 初始化时间管理器
|
// 初始化波形生成器(电刺激)- 必须先初始化
|
||||||
Time_Manager_Init();
|
|
||||||
|
|
||||||
// 初始化波形生成器(电刺激)
|
|
||||||
wavegen_Init();
|
wavegen_Init();
|
||||||
|
|
||||||
// 配置电刺激参数
|
|
||||||
EMS_Config_TypeDef ems_config = {
|
|
||||||
.frequency = 100, // 100Hz
|
|
||||||
.duration = 1000, // 1000ms
|
|
||||||
.intensity = 128, // 中等强度
|
|
||||||
.rest_time = 100, // 100ms休息时间
|
|
||||||
.silent_time = 50, // 50ms静默时间
|
|
||||||
|
|
||||||
// 缓进缓出控制参数
|
|
||||||
.ramp_up_time = 2, // 缓进时间:2秒
|
|
||||||
.hold_time = 6, // 保持时间:6秒
|
|
||||||
.ramp_down_time = 2, // 缓出时间:2秒
|
|
||||||
.enable_ramp = 1 // 启用渐进控制
|
|
||||||
};
|
|
||||||
EMS_Configure(&ems_config);
|
|
||||||
|
|
||||||
// 启动电刺激
|
// 启动电刺激
|
||||||
EMS_Start();
|
EMS_Start();
|
||||||
|
|
||||||
|
|
||||||
static uint8_t ems_control_count = 0; // 电刺激控制计数器
|
|
||||||
static uint8_t ems_state = 0; // 电刺激状态:0=关闭,1=开启
|
|
||||||
|
|
||||||
while(1)
|
while(1)
|
||||||
{
|
{
|
||||||
// 获取时间标志位
|
|
||||||
Time_Flag_TypeDef* time_flags = Time_Manager_GetFlags();
|
|
||||||
|
|
||||||
// 处理电刺激(在主循环中运行)
|
|
||||||
// 注意:这里不再直接调用EMS_Process(),而是通过状态控制
|
|
||||||
|
|
||||||
// 基于时间标志位执行不同周期的任务
|
|
||||||
if (time_flags->T_2ms) {
|
|
||||||
// 2ms周期任务 - 高频控制任务
|
|
||||||
time_flags->T_2ms = 0; // 清除标志位
|
|
||||||
}
|
|
||||||
|
|
||||||
if (time_flags->T_10ms) {
|
|
||||||
// 10ms周期任务 - 中频控制任务
|
|
||||||
time_flags->T_10ms = 0; // 清除标志位
|
|
||||||
}
|
|
||||||
|
|
||||||
if (time_flags->T_100ms) {
|
|
||||||
// 100ms周期任务 - 低频控制任务
|
|
||||||
time_flags->T_100ms = 0; // 清除标志位
|
|
||||||
}
|
|
||||||
|
|
||||||
if (time_flags->T_1s) {
|
|
||||||
// 1s周期任务 - 超低频任务
|
|
||||||
ems_control_count++; // 每秒递增计数器
|
|
||||||
|
|
||||||
|
|
||||||
// 间断性放电控制逻辑
|
|
||||||
if (ems_control_count <= 10) {
|
|
||||||
// 前10秒:开启电刺激
|
|
||||||
if (ems_state == 0) {
|
|
||||||
ems_state = 1;
|
|
||||||
EMS_Start(); // 启动电刺激
|
|
||||||
}
|
|
||||||
// 处理电刺激
|
|
||||||
EMS_Process();
|
|
||||||
} else if (ems_control_count <= 20) {
|
|
||||||
// 后10秒:关闭电刺激
|
|
||||||
if (ems_state == 1) {
|
|
||||||
ems_state = 0;
|
|
||||||
EMS_Stop(); // 停止电刺激
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// 重置计数器,开始新的周期
|
|
||||||
ems_control_count = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
GPIO_Overturn(GPIO_19); // GPIO19翻转
|
|
||||||
time_flags->T_1s = 0; // 清除标志位
|
|
||||||
}
|
|
||||||
|
|
||||||
// 定时器中断处理在 TIMER0_Handler() 中
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue