/*
*Copyright ,2023 , NANOCHAP
*File name:   MIAN.C          
*Author:      
*Version:     V1.0 
*Date:        2023-11-                  	
*Description:   定时器电刺激综合测试（TIMER0 + 电刺激）
*Function List: 
   
History: 
1.V1.0
Date:          
Author: 
Modification: 初版

*/  
#include "my_header.h"
#include "ENS1_MTP.h"
#include "ENS1_CLOCK.h"
#include "ENS1_UART.h"
#include "ENS1_TIMER.h"
#include "ENS1_GPIO.h"
#include "ENS1_WAVEGEN.h"

int main(){
	// 初始化系统
	MTP_init();
	ClockInit();
	
	// 初始化GPIO19用于定时器指示
	GPIO_IO_Init(GPIO_19, OUTPUT, GPIO_OType_PP, GPIO_NOPULL, OUTPUT_FAST, PDRV_4mA, ENABLE);
	GPIO_Output(GPIO_19, LOW_LEVEL);
	
	// 初始化UART
    UART_Init(CMSDK_UART1, &UART1_Init);
    UART_ITConfig(CMSDK_UART1, &UART1_ITSet);
	
	// 初始化定时器（在wavegen_Init之前）
	TIMER0_Init(1);
	
	// 初始化时间管理器
	Time_Manager_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();

	
	static uint8_t ems_control_count = 0;  // 电刺激控制计数器
	static uint8_t ems_state = 0;          // 电刺激状态：0=关闭，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() 中
	}
}

