Electricity/FWLIB/source/ENS_CURRENT_CALIBRATION.c

479 lines
22 KiB
C
Raw Permalink Normal View History

/*
*Copyright ,2023 , NANOCHAP
*File name: ENS1_CURRENT_CALIBRATION.C
*Author:
*Version: V1.0
*Date: 2023-11-
*Description:
*Function List:
History:
1.V1.0
Date:
Author:
Modification: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
#include "ENS_CURRENT_CALIBRATION.h"
#include "ENS1_MTP.h"
#include "ENS1_UART.h"
#include "ENS1_TIMER.h"
/*--------------------------------<2D><><EFBFBD>β<EFBFBD><CEB2><EFBFBD><EFBFBD>ij<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><E1B9B9>-----------------------------*/
STRUCT_WAVEFORM_PARA ParaSet_waveform[4] =
{
/*ͨ<><CDA8>1 -- ST0 ST1 */
{
.Type = SQUARE_WAVE , //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
.PositivePulseWidth = 100 , //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><CEA2>
.DeadTime = 10, //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><><CEA2>
.NegativePulseWidth = 100 , //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><CEA2>
.ClientTime = 1000 , //<2F><>Ĭʱ<C4AC><CAB1><><CEA2>
.DelayOutputTime_US = 0, //<2F>ӳ<EFBFBD><D3B3><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><><CEA2>
.OtherWaveformPara.AlternatingFreq_HZ = 0, //<2F><><EFBFBD><EFBFBD><E6B2A8>Ƶ<EFBFBD><C6B5> //
.OtherWaveformPara.TotalOutputTime_S = 0, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> <20><>
.OtherWaveformPara.NumOfPulseGroups = 0, //<2F><><EFBFBD><EFBFBD>Ⱥģʽ<C4A3>µ<EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
.OtherWaveformPara.TimeOfPulseGroups_MS = 0, //<2F><><EFBFBD><EFBFBD>Ⱥģʽ<C4A3>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> <20><><EFBFBD><EFBFBD>
},
/*ͨ<><CDA8>2 -- ST2 ST3 */
{
.Type = TRIANGULAR_WAVE , //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
.PositivePulseWidth = 0 , //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><CEA2>
.DeadTime = 0, //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><><CEA2>
.NegativePulseWidth = 0 , //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><CEA2>
.ClientTime = 0 , //<2F><>Ĭʱ<C4AC><CAB1><><CEA2>
.DelayOutputTime_US = 0, //<2F>ӳ<EFBFBD><D3B3><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><><CEA2>
.OtherWaveformPara.AlternatingFreq_HZ = 0, //<2F><><EFBFBD><EFBFBD><E6B2A8>Ƶ<EFBFBD><C6B5> //
.OtherWaveformPara.TotalOutputTime_S = 0, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> <20><>
.OtherWaveformPara.NumOfPulseGroups = 0, //<2F><><EFBFBD><EFBFBD>Ⱥģʽ<C4A3>µ<EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
.OtherWaveformPara.TimeOfPulseGroups_MS = 0, //<2F><><EFBFBD><EFBFBD>Ⱥģʽ<C4A3>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> <20><><EFBFBD><EFBFBD>
},
/*ͨ<><CDA8>3 -- ST4 ST5 */
{
.Type = TRIANGULAR_WAVE , //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
.PositivePulseWidth = 0 , //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><CEA2>
.DeadTime = 0, //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><><CEA2>
.NegativePulseWidth = 0 , //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><CEA2>
.ClientTime = 0 , //<2F><>Ĭʱ<C4AC><CAB1><><CEA2>
.DelayOutputTime_US = 0, //<2F>ӳ<EFBFBD><D3B3><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><><CEA2>
.OtherWaveformPara.AlternatingFreq_HZ = 0, //<2F><><EFBFBD><EFBFBD><E6B2A8>Ƶ<EFBFBD><C6B5> //
.OtherWaveformPara.TotalOutputTime_S = 0, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> <20><>
.OtherWaveformPara.NumOfPulseGroups = 0, //<2F><><EFBFBD><EFBFBD>Ⱥģʽ<C4A3>µ<EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
.OtherWaveformPara.TimeOfPulseGroups_MS = 0, //<2F><><EFBFBD><EFBFBD>Ⱥģʽ<C4A3>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> <20><><EFBFBD><EFBFBD>
},
/*ͨ<><CDA8>4 -- ST6 ST7 */
{
.Type = TRIANGULAR_WAVE , //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
.PositivePulseWidth = 0 , //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><CEA2>
.DeadTime = 0, //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><><CEA2>
.NegativePulseWidth = 0 , //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><CEA2>
.ClientTime = 0 , //<2F><>Ĭʱ<C4AC><CAB1><><CEA2>
.DelayOutputTime_US = 0, //<2F>ӳ<EFBFBD><D3B3><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><><CEA2>
.OtherWaveformPara.AlternatingFreq_HZ = 0, //<2F><><EFBFBD><EFBFBD><E6B2A8>Ƶ<EFBFBD><C6B5> //
.OtherWaveformPara.TotalOutputTime_S = 0, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> <20><>
.OtherWaveformPara.NumOfPulseGroups = 0, //<2F><><EFBFBD><EFBFBD>Ⱥģʽ<C4A3>µ<EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
.OtherWaveformPara.TimeOfPulseGroups_MS = 0, //<2F><><EFBFBD><EFBFBD>Ⱥģʽ<C4A3>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> <20><><EFBFBD><EFBFBD>
},
};
/*-------------------------------------------------------------------------------------*/
/*-------------------------<2D><>ȡ<EFBFBD><C8A1>FT<46><54><EFBFBD>Ժ<EFBFBD><D4BA>ʵ<EFBFBD>ʲ<EFBFBD><CAB2><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>ֵ---------------------------*/
uint16_t FT_CURRENT_SAVE[4]={0,0,0,0}; //<2F><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD>FT<46><54>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t CUSTOM_UNIT_CURRENT[4]={33,33,33,33}; //<2F><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>嵥Ԫ<E5B5A5><D4AA><EFBFBD><EFBFBD>ֵ
uint8_t unit_current[4] ={0,0,0,0}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>ʵ<EFBFBD>ʵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>ֵ
uint8_t GET_FT_CURRENT(void) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>208*4
{
//<2F><><EFBFBD><EFBFBD>Ҫʹ<D2AA><CAB9>FT<46><54><EFBFBD>оƬʱ<C6AC><CAB1><EFBFBD><EFBFBD>ע<EFBFBD>ͣ<EFBFBD> <20><>ʱ<EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>㵥Ԫ<E3B5A5><D4AA><EFBFBD><EFBFBD>
//<2F><><EFBFBD>ֶ<EFBFBD>У׼ʱ<D7BC><CAB1><EFBFBD>޸<EFBFBD>CUSTOM_UNIT_CURRENT[4] <20><><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD><34>ע<EFBFBD>͵<EFBFBD>
// flash_read(DATA_SAVE_ADDR ,&FT_CURRENT_SAVE[0]);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MTP<54>е<EFBFBD>ʵ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD>ʵ<EFBFBD>ʵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>
// flash_read(DATA_SAVE_ADDR+2 ,&FT_CURRENT_SAVE[1]);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MTP<54>е<EFBFBD>ʵ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD>ʵ<EFBFBD>ʵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>
// flash_read(DATA_SAVE_ADDR+4 ,&FT_CURRENT_SAVE[2]);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MTP<54>е<EFBFBD>ʵ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD>ʵ<EFBFBD>ʵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>
// flash_read(DATA_SAVE_ADDR+6 ,&FT_CURRENT_SAVE[3]);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MTP<54>е<EFBFBD>ʵ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD>ʵ<EFBFBD>ʵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>
for(int i = 0 ;i<4;i++)
{
if(FT_CURRENT_SAVE[i] != 0)
unit_current[i] = (uint8_t)(FT_CURRENT_SAVE[i] /( 208 * 4 )) ; //<2F><><EFBFBD><EFBFBD>ʵ<EFBFBD>ʵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>
else
unit_current[i] = CUSTOM_UNIT_CURRENT[i] ;
}
return 0;
}
/*-------------------------------------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>--------------------------------*/
//<2F><><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
double sin_cal(uint8_t angle) //0-180
{
double radian = angle*PI/180;
return sin(radian);
}
//<2F><><EFBFBD>㲻ͬ<E3B2BB><CDAC><EFBFBD><EFBFBD><EFBFBD>µĵ<C2B5>64<36><34><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ǰ<EFBFBD>з<EFBFBD><D0B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Dz<EFBFBD>
uint16_t unit_t[4]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>0-7<><37> <20><><EFBFBD>ĸ<EFBFBD>ͨ<EFBFBD><CDA8>
uint32_t isel_t[4][64]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>0-255<35><35><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD>ͨ<EFBFBD><CDA8>
BasicWaveformType wavePara_type[4];
uint8_t cal_output_current_mA(CHANNEL_NUM CHANNEL_X,float mA,BasicWaveformType type, uint16_t* unit , uint32_t (*isel)[64]) // uint16_t read_current_data
{
CMSDK_WAVE_GEN_TypeDef* WAVE_GEN_BLK;
if(CHANNEL_X == CHANNEL_0) WAVE_GEN_BLK=WAVE_GEN_DRVA_BLK0;
else if(CHANNEL_X == CHANNEL_1) WAVE_GEN_BLK=WAVE_GEN_DRVA_BLK1;
else if(CHANNEL_X == CHANNEL_2) WAVE_GEN_BLK=WAVE_GEN_DRVA_BLK2;
else WAVE_GEN_BLK = WAVE_GEN_DRVA_BLK3;
if(!mA)
{
for(uint8_t i = 0 ;i<4;i++){
unit_t[i] = 0;
for(uint8_t j = 0;j<64;j++)
{
isel_t[i][j] = 0;
}
}
}
else
{
if(type == SQUARE_WAVE)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>صļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ֵ
*(unit+CHANNEL_X) = (uint16_t)(mA * 1000 / (unit_current[CHANNEL_X] * 255)); // 0 - 7
for(int i = 0 ;i<64;i++)
{
*(isel[0]+CHANNEL_X*64+i) = (uint16_t)(mA * 1000 / ((*(unit+CHANNEL_X)+1)*unit_current[CHANNEL_X])); // 0 - 255
}
}
else if(type== SINE_WAVE)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>صļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ֵ
*(unit+CHANNEL_X) = (uint16_t)(mA * 1000 / (unit_current[CHANNEL_X] * 255)); // 0 - 7
for(int i = 0 ;i<64;i++)
{
*(isel[0]+CHANNEL_X*64+i) = (uint16_t)(mA * 1000 / ((*(unit+CHANNEL_X) + 1)*unit_current[CHANNEL_X])*sin_cal(i*2.85714)); // 0 - 255
}
}
else //<2F><><EFBFBD>Dz<EFBFBD><C7B2><EFBFBD>ֵ(type == TRIANGULAR_WAVE )
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>صļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ֵ
*(unit+CHANNEL_X) = (uint16_t)(mA * 1000 / (unit_current[CHANNEL_X] * 255)); // 0 - 7
*(isel[0]+CHANNEL_X*64) = 0;
*(isel[0]+CHANNEL_X*64+63) = 0;
for(int j = 1 ; j<32 ; j++)
{
*(isel[0]+CHANNEL_X*64+j) = (uint16_t)(mA * 1000 / ((*(unit+CHANNEL_X)+1)*unit_current[CHANNEL_X]) * 0.033258*j); // 0 - 255
}
for(int k = 32 ; k<63 ; k++)
{
*(isel[0]+CHANNEL_X*64+k) =*(isel[0]+CHANNEL_X*64+(63-k)) ;
}
}
}
return 0;
}
/*<2A><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
/*CONFIG<49>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
uint8_t ENS_STIMU_CONFIG_BIT_ENABLE(CHANNEL_NUM CHANNEL_X , DRV_CONFIG BIT)
{
CMSDK_WAVE_GEN_TypeDef* WAVE_GEN_BLK;
if(CHANNEL_X == CHANNEL_0) WAVE_GEN_BLK=WAVE_GEN_DRVA_BLK0;
else if(CHANNEL_X == CHANNEL_1) WAVE_GEN_BLK=WAVE_GEN_DRVA_BLK1;
else if(CHANNEL_X == CHANNEL_2) WAVE_GEN_BLK=WAVE_GEN_DRVA_BLK2;
else WAVE_GEN_BLK = WAVE_GEN_DRVA_BLK3;
if(BIT == DISABLE_ALL_BIT)
{
WAVE_GEN_BLK->WAVE_GEN_DRV_CONFIG_REG = 0x00;
return (uint8_t)WAVE_GEN_BLK->WAVE_GEN_DRV_CONFIG_REG ;
}
if(BIT == ENABLE_ALL_BIT)
{
WAVE_GEN_BLK->WAVE_GEN_DRV_CONFIG_REG = ENABLE_ALL_BIT;
return (uint8_t)WAVE_GEN_BLK->WAVE_GEN_DRV_CONFIG_REG ;
}
if((BIT != DISABLE_ALL_BIT) && (BIT != ENABLE_ALL_BIT))
{
WAVE_GEN_BLK->WAVE_GEN_DRV_CONFIG_REG |= BIT;
}
return (uint8_t)WAVE_GEN_BLK->WAVE_GEN_DRV_CONFIG_REG ;
}
uint8_t ENS_STIMU_CONFIG_BIT_DISABLE(CHANNEL_NUM CHANNEL_X , DRV_CONFIG BIT)
{
CMSDK_WAVE_GEN_TypeDef* WAVE_GEN_BLK;
if(CHANNEL_X == CHANNEL_0) WAVE_GEN_BLK=WAVE_GEN_DRVA_BLK0;
else if(CHANNEL_X == CHANNEL_1) WAVE_GEN_BLK=WAVE_GEN_DRVA_BLK1;
else if(CHANNEL_X == CHANNEL_2) WAVE_GEN_BLK=WAVE_GEN_DRVA_BLK2;
else WAVE_GEN_BLK = WAVE_GEN_DRVA_BLK3;
if(BIT == DISABLE_ALL_BIT)
{
WAVE_GEN_BLK->WAVE_GEN_DRV_CONFIG_REG = 0x00;
return (uint8_t)WAVE_GEN_BLK->WAVE_GEN_DRV_CONFIG_REG ;
}
if(BIT == ENABLE_ALL_BIT)
{
WAVE_GEN_BLK->WAVE_GEN_DRV_CONFIG_REG = ENABLE_ALL_BIT;
return (uint8_t)WAVE_GEN_BLK->WAVE_GEN_DRV_CONFIG_REG ;
}
if((BIT != DISABLE_ALL_BIT) && (BIT != ENABLE_ALL_BIT))
{
WAVE_GEN_BLK->WAVE_GEN_DRV_CONFIG_REG &=~ BIT;
}
return (uint8_t)WAVE_GEN_BLK->WAVE_GEN_DRV_CONFIG_REG ;
}
/*---------------------------<2D><>̼<EFBFBD><CCBC>йصļĴ<C4BC><C4B4><EFBFBD><EFBFBD>ij<EFBFBD>ʼ<EFBFBD><CABC>--------------------------------*/
uint32_t StimulatorInit(CHANNEL_NUM CHANNEL_X)
{
//uint32_t WaveformFreq=0;
CMSDK_WAVE_GEN_TypeDef* WAVE_GEN_BLK;
if(CHANNEL_X == CHANNEL_0) WAVE_GEN_BLK=WAVE_GEN_DRVA_BLK0;
else if(CHANNEL_X == CHANNEL_1) WAVE_GEN_BLK=WAVE_GEN_DRVA_BLK1;
else if(CHANNEL_X == CHANNEL_2) WAVE_GEN_BLK=WAVE_GEN_DRVA_BLK2;
else WAVE_GEN_BLK = WAVE_GEN_DRVA_BLK3;
//config <20><><EFBFBD><EFBFBD>
ENS_STIMU_CONFIG_BIT_ENABLE(CHANNEL_X,DISABLE_ALL_BIT);
//1 <20><> <20><><EFBFBD><EFBFBD>ʱ<EFBFBD>䲻Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD>β<EFBFBD>Ϊsine<6E><65> ,ʹ<><CAB9>REST
if((ParaSet_waveform[CHANNEL_X].DeadTime > 0)){
ENS_STIMU_CONFIG_BIT_ENABLE(CHANNEL_X,REST_BIT);
}
else
{
ENS_STIMU_CONFIG_BIT_DISABLE(CHANNEL_X,REST_BIT);
}
//2 <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0 ʹ<><CAB9> NEGATIVE_BIT <20><> SOURCE_B_BIT
if(ParaSet_waveform[CHANNEL_X].NegativePulseWidth > 0)
{
ENS_STIMU_CONFIG_BIT_ENABLE(CHANNEL_X,SOURCE_B_BIT ); //SOURCEB<45><42>ʹ<EFBFBD><CAB9><EFBFBD>򸺰<EFBFBD><F2B8BAB0><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>=0<><30>
ENS_STIMU_CONFIG_BIT_ENABLE(CHANNEL_X,NEGATIVE_BIT );
}
//3<><33><EFBFBD><EFBFBD>Ĭʱ<C4AC>䲻Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SILENT_BIT
if(ParaSet_waveform[CHANNEL_X].ClientTime>0)
{
ENS_STIMU_CONFIG_BIT_ENABLE(CHANNEL_X,SILENT_BIT);
}
else
{
ENS_STIMU_CONFIG_BIT_DISABLE(CHANNEL_X,SILENT_BIT);
}
//4<><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽALTERNATING_POSITIVE_BIT
if(ParaSet_waveform[CHANNEL_X].OtherWaveformPara.AlternatingFreq_HZ > 0 )
{
ENS_STIMU_CONFIG_BIT_ENABLE(CHANNEL_X,ALTERNATING_POSITIVE_BIT);
ENS_STIMU_CONFIG_BIT_DISABLE(CHANNEL_X,SOURCE_B_BIT);
ENS_STIMU_CONFIG_BIT_DISABLE(CHANNEL_X,NEGATIVE_BIT);
//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>й<EFBFBD>,<2C><><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>Ƶ<EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD>Ҫת<D2AA><D7AA>Ϊʱ<CEAA>Ӹ<EFBFBD><D3B8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>Ӹ<EFBFBD><D3B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD>2^16
WAVE_GEN_BLK ->WAVE_GEN_DRV_ALT_LIM_REG =(uint16_t)(ParaSet_waveform[CHANNEL_X].PositivePulseWidth / (uint16_t)ParaSet_waveform[CHANNEL_X].OtherWaveformPara.AlternatingFreq_HZ * (uint16_t)(APB_Clock_Freq/1000000)) ;
ParaSet_waveform[CHANNEL_X].NegativePulseWidth = 0;
}
else
{
ENS_STIMU_CONFIG_BIT_DISABLE(CHANNEL_X,ALTERNATING_POSITIVE_BIT);
}
ENS_STIMU_CONFIG_BIT_ENABLE(CHANNEL_X,CONTINUE_REPEATING_BIT);
//<2F>ӳ<EFBFBD><D3B3><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD> <20><>λus
WAVE_GEN_BLK->WAVE_GEN_DRV_DELAY_LIM_REG = (uint8_t)(APB_Clock_Freq/1000000)*ParaSet_waveform[CHANNEL_X].DelayOutputTime_US;
//<2F><><EFBFBD>ݳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>STRUCT_WAVEFORM_PARA<52><EFBFBD><E1B9B9><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ֵ
WAVE_GEN_BLK->WAVE_GEN_DRV_NEG_HLF_WAVE_PRD_REG = ParaSet_waveform[CHANNEL_X].NegativePulseWidth;
WAVE_GEN_BLK->WAVE_GEN_DRV_HLF_WAVE_PRD_REG = ParaSet_waveform[CHANNEL_X].PositivePulseWidth;
WAVE_GEN_BLK->WAVE_GEN_DRV_CLK_FREQ_REG = (uint32_t)(APB_Clock_Freq/1000000); //
WAVE_GEN_BLK->WAVE_GEN_DRV_SILENT_T_REG = ParaSet_waveform[CHANNEL_X].ClientTime;
WAVE_GEN_BLK->WAVE_GEN_DRV_REST_T_REG = ParaSet_waveform[CHANNEL_X].DeadTime;
WAVE_GEN_BLK->WAVE_GEN_DRV_NEG_SCALE_REG = 1; //<2F>Ĵ<EFBFBD><C4B4><EFBFBD>Ĭ<EFBFBD><C4AC>Ϊ0<CEAA><30> <20><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD>
WAVE_GEN_BLK->WAVE_GEN_DRV_NEG_OFFSET_REG = 0;
//WaveformFreq = (uint32_t)(1000000 / (wavePara.ClientTime + wavePara.DeadTime +wavePara.NegativePulseWidth + wavePara.PositivePulseWidth));
//<2F><><EFBFBD><EFBFBD><E6B2A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
wavePara_type[CHANNEL_X] = ParaSet_waveform[CHANNEL_X].Type;
TOTAL_TIME_THRESHOLD_VALUE[CHANNEL_X] = ParaSet_waveform[CHANNEL_X].OtherWaveformPara.TotalOutputTime_S * 1000;
if( (ParaSet_waveform[CHANNEL_X].OtherWaveformPara.TimeOfPulseGroups_MS > 0) || (ParaSet_waveform[CHANNEL_X].OtherWaveformPara.NumOfPulseGroups >0))
{
TRIGGER_TIME_COUNT[CHANNEL_X] = 0; //<2F><><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TRIGGER_TIME_THRESHOLD_VALUE[CHANNEL_X]=ParaSet_waveform[CHANNEL_X].OtherWaveformPara.TimeOfPulseGroups_MS ;
NUM_OF_PULSES_THRESHOLD[CHANNEL_X] = ParaSet_waveform[CHANNEL_X].OtherWaveformPara.NumOfPulseGroups ;
WAVE_GEN_BLK->WAVE_GEN_DRV_INT_REG = 0x001f0001;
}
uint8_t returnValue = cal_output_current_mA(CHANNEL_X,0, wavePara_type[CHANNEL_X], unit_t , isel_t) ;
return (uint32_t)(WAVE_GEN_BLK->WAVE_GEN_DRV_CONFIG_REG); //<2F><><EFBFBD>ز<EFBFBD><D8B2>ε<EFBFBD>Ƶ<EFBFBD><C6B5>
}
/*--------------------------------------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-----------------------------------------*/
volatile uint8_t statics_config=0; //<2F><>ȷ<EFBFBD><C8B7>ǰ<EFBFBD>м<EFBFBD><D0BC><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0 / 1 / 2 /4 / 8
void StartStimulatorOut(CHANNEL_NUM CHANNEL_X)
{
CMSDK_WAVE_GEN_TypeDef* WAVE_GEN_BLK;
if(CHANNEL_X == CHANNEL_0) {WAVE_GEN_BLK=WAVE_GEN_DRVA_BLK0; statics_config |= (1<<0); }
else if(CHANNEL_X == CHANNEL_1) {WAVE_GEN_BLK=WAVE_GEN_DRVA_BLK1; statics_config |= (1<<1);}
else if(CHANNEL_X == CHANNEL_2) {WAVE_GEN_BLK=WAVE_GEN_DRVA_BLK2; statics_config |= (1<<2);}
else {WAVE_GEN_BLK = WAVE_GEN_DRVA_BLK3; statics_config |= (1<<3) ;}
if(statics_config > 1)
{
ENS_STIMU_CONFIG_BIT_ENABLE(CHANNEL_X,MULTI_ELECTRODE_BIT); //<2F><>ʹ<E7BCAB><CAB9>
}
WAVE_GEN_BLK->WAVE_GEN_DRV_CTRL_REG = 1;
}
/*--------------------------------------ֹͣ<CDA3><D6B9><EFBFBD>----------------------------------------*/
void StopStimulatorOut(CHANNEL_NUM CHANNEL_X)
{
CMSDK_WAVE_GEN_TypeDef* WAVE_GEN_BLK;
if(CHANNEL_X == CHANNEL_0) {WAVE_GEN_BLK=WAVE_GEN_DRVA_BLK0; statics_config &=~(1<<0); }
else if(CHANNEL_X == CHANNEL_1) {WAVE_GEN_BLK=WAVE_GEN_DRVA_BLK1; statics_config &=~(1<<1); }
else if(CHANNEL_X == CHANNEL_2) {WAVE_GEN_BLK=WAVE_GEN_DRVA_BLK2; statics_config &=~(1<<2); }
else {WAVE_GEN_BLK = WAVE_GEN_DRVA_BLK3; statics_config &=~(1<<3); }
WAVE_GEN_BLK->WAVE_GEN_DRV_CTRL_REG = 0;
if(statics_config < 2)
{
ENS_STIMU_CONFIG_BIT_DISABLE(CHANNEL_X,MULTI_ELECTRODE_BIT);
}
}
/*-----------------------------<2D><>̼<EFBFBD><CCBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>еĵ<D0B5><C4B5><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-------------------------------*/
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD>޸<EFBFBD>*/
uint8_t CURRENT_AMPLITUDE_MODIFY(CHANNEL_NUM CHANNEL_X , float mA)
{
CMSDK_WAVE_GEN_TypeDef* WAVE_GEN_BLK;
if(CHANNEL_X == CHANNEL_0) WAVE_GEN_BLK=WAVE_GEN_DRVA_BLK0;
else if(CHANNEL_X == CHANNEL_1) WAVE_GEN_BLK=WAVE_GEN_DRVA_BLK1;
else if(CHANNEL_X == CHANNEL_2) WAVE_GEN_BLK=WAVE_GEN_DRVA_BLK2;
else WAVE_GEN_BLK = WAVE_GEN_DRVA_BLK3;
NVIC_DisableIRQ(WG_DRV_IRQn);
WAVE_GEN_BLK->WAVE_GEN_DRV_INT_REG = 0;
StopStimulatorOut(CHANNEL_X);
cal_output_current_mA(CHANNEL_X,mA, wavePara_type[CHANNEL_X], unit_t , isel_t) ;
WAVE_GEN_BLK ->WAVE_GEN_DRV_ISEL_REG = unit_t[CHANNEL_X]; //<2F><>Χ 0x00 - 0x07 <20><>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>
for(int i=0; i<64; i++){
WAVE_GEN_BLK->WAVE_GEN_DRV_IN_WAVE_ADDR_REG = i;
WAVE_GEN_BLK->WAVE_GEN_DRV_IN_WAVE_REG = isel_t[CHANNEL_X][i]; //<2F><><EFBFBD>0xff <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
}
WAVE_GEN_BLK->WAVE_GEN_DRV_INT_REG = 0x001f0001;
NVIC_EnableIRQ(WG_DRV_IRQn);
StartStimulatorOut(CHANNEL_X);
return (uint8_t)(WAVE_GEN_BLK->WAVE_GEN_DRV_CTRL_REG); //<2F><><EFBFBD><EFBFBD>״̬
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>ʵ<EFBFBD>ʵʱ<CAB5>޸ģ<DEB8><C4A3><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>=(1000000/(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> + <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> + <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> + <20><>Ĭʱ<C4AC><CAB1>))*/
uint32_t CURRENT_FREQ_MODIFY(CHANNEL_NUM CHANNEL_X , uint32_t freq)
{
uint32_t Pulse_Width = 0;
CMSDK_WAVE_GEN_TypeDef* WAVE_GEN_BLK;
if(CHANNEL_X == CHANNEL_0) WAVE_GEN_BLK=WAVE_GEN_DRVA_BLK0;
else if(CHANNEL_X == CHANNEL_1) WAVE_GEN_BLK=WAVE_GEN_DRVA_BLK1;
else if(CHANNEL_X == CHANNEL_2) WAVE_GEN_BLK=WAVE_GEN_DRVA_BLK2;
else WAVE_GEN_BLK = WAVE_GEN_DRVA_BLK3;
if(freq > 50000 )
freq = 50000;
else if(freq < 10)
freq = 10;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭʱ<C4AC>䲻Ϊ0 <20><><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD>޸ľ<DEB8>Ĭʱ<C4AC><CAB1><EFBFBD>޸IJ<DEB8><C4B2><EFBFBD>Ƶ<EFBFBD><C6B5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭʱ<C4AC><CAB1>Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>Ƶ<EFBFBD><C6B5>
if(ParaSet_waveform[CHANNEL_X].ClientTime > 0)
{
Pulse_Width/*<2A><>Ĭʱ<C4AC><CAB1>*/ = (uint32_t)((1000000/freq) - ParaSet_waveform[CHANNEL_X].DeadTime - ParaSet_waveform[CHANNEL_X].PositivePulseWidth - ParaSet_waveform[CHANNEL_X].NegativePulseWidth);
WAVE_GEN_BLK->WAVE_GEN_DRV_SILENT_T_REG = Pulse_Width;
return Pulse_Width;
}
else if(ParaSet_waveform[CHANNEL_X].ClientTime == 0)
{
Pulse_Width/*<2A><>+<2B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/ = (uint32_t)((1000000/freq) - ParaSet_waveform[CHANNEL_X].DeadTime) ;
if(ParaSet_waveform[CHANNEL_X].NegativePulseWidth == 0)
WAVE_GEN_BLK->WAVE_GEN_DRV_HLF_WAVE_PRD_REG = Pulse_Width;
else
{
WAVE_GEN_BLK->WAVE_GEN_DRV_HLF_WAVE_PRD_REG = (uint32_t) (Pulse_Width / 2) ;
WAVE_GEN_BLK->WAVE_GEN_DRV_NEG_HLF_WAVE_PRD_REG = (uint32_t) (Pulse_Width / 2) ;
}
return Pulse_Width;
}
else
{
return 0;
}
}
//<2F><>̼<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ʱ
uint32_t StimuTimeCount_S(CHANNEL_NUM CHANNEL_X , TIME_COUNT_MODE MODE)
{
uint32_t count_time = 0;
if(MODE == TOTAL_TIME_MODE)
{
count_time = *(CHANNEL_TIME_COUNT+CHANNEL_X) ;
}
else //MODE == TRIGGER_TIME_MODE <20><><EFBFBD>ʱ<EFBFBD><CAB1>
{
count_time = *(TRIGGER_TIME_COUNT+CHANNEL_X);
}
return count_time;
}
//<2F><><EFBFBD>ص<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>η<EFBFBD><CEB7><EFBFBD><EFBFBD>˶<EFBFBD><CBB6>ٴΣ<D9B4><CEA3><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>η<EFBFBD><CEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6>
uint32_t waveformOccurreCount(CHANNEL_NUM CHANNEL_X)
{
return (uint32_t)(wave_gen_irq_occurred[CHANNEL_X]/4);
}
/*-------------------------------<2D><>̼<EFBFBD><CCBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-----------------------*/
volatile uint32_t NUM_OF_PULSES_THRESHOLD[4]={0,0,0,0};
volatile uint32_t wave_gen_irq_occurred[4]={0,0,0,0};
void WG_DRV_Handler(void)
{
CMSDK_WAVE_GEN_TypeDef *DRVA;
for(int i =0; i<4;i++)
{
if(i==0){ DRVA= WAVE_GEN_DRVA_BLK0; }
else if(i==1){ DRVA= WAVE_GEN_DRVA_BLK1; }
else if(i==2){ DRVA= WAVE_GEN_DRVA_BLK2; }
else if(i==3){ DRVA= WAVE_GEN_DRVA_BLK3; }
if((DRVA->WAVE_GEN_DRV_INT_REG & CMSDK_WAVE_GEN_DRV_INT_READ_DRIVER_NUM_Msk) == i) //<2F>ж<EFBFBD><D0B6>ĸ<EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
{
if((DRVA->WAVE_GEN_DRV_INT_REG & CMSDK_WAVE_GEN_DRV_INT_FIRSTADDR_STS_Msk) == CMSDK_WAVE_GEN_DRV_INT_FIRSTADDR_STS_Msk)//<2F><>һ<EFBFBD>жϵ㷢<CFB5><E3B7A2><EFBFBD>ж<EFBFBD>
{
if(((DRVA->WAVE_GEN_DRV_INT_REG & CMSDK_WAVE_GEN_DRV_INT_READ_FIRST_ADDR_Msk)>>CMSDK_WAVE_GEN_DRV_INT_READ_FIRST_ADDR_Pos) == 0)
{
if((NUM_OF_PULSES_THRESHOLD[i] > 0) && (wave_gen_irq_occurred[i] > (NUM_OF_PULSES_THRESHOLD[i]*4 - 2)))
DRVA->WAVE_GEN_DRV_INT_REG = (63 << CMSDK_WAVE_GEN_DRV_INT_SECOND_ADDR_Pos) | (0 << CMSDK_WAVE_GEN_DRV_INT_FIRST_ADDR_Pos) | CMSDK_WAVE_GEN_DRV_INT_FIRSTADDR_CLR_Msk | CMSDK_WAVE_GEN_DRV_INT_EN_Msk;
else
DRVA->WAVE_GEN_DRV_INT_REG = (63 << CMSDK_WAVE_GEN_DRV_INT_SECOND_ADDR_Pos) | (32 << CMSDK_WAVE_GEN_DRV_INT_FIRST_ADDR_Pos) | CMSDK_WAVE_GEN_DRV_INT_FIRSTADDR_CLR_Msk | CMSDK_WAVE_GEN_DRV_INT_EN_Msk;
}
else if(((DRVA->WAVE_GEN_DRV_INT_REG & CMSDK_WAVE_GEN_DRV_INT_READ_FIRST_ADDR_Msk)>>CMSDK_WAVE_GEN_DRV_INT_READ_FIRST_ADDR_Pos) == 32)
{
DRVA->WAVE_GEN_DRV_INT_REG = (31 << CMSDK_WAVE_GEN_DRV_INT_SECOND_ADDR_Pos) | (0 << CMSDK_WAVE_GEN_DRV_INT_FIRST_ADDR_Pos) | CMSDK_WAVE_GEN_DRV_INT_FIRSTADDR_CLR_Msk | CMSDK_WAVE_GEN_DRV_INT_EN_Msk;
}
if((NUM_OF_PULSES_THRESHOLD[i] > 0)) //<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܲſ<DCB2><C5BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
wave_gen_irq_occurred[i]++;
}
if((DRVA->WAVE_GEN_DRV_INT_REG & CMSDK_WAVE_GEN_DRV_INT_SECONDADDR_STS_Msk) == CMSDK_WAVE_GEN_DRV_INT_SECONDADDR_STS_Msk)
{
StopStimulatorOut((CHANNEL_NUM)i);
DRVA->WAVE_GEN_DRV_INT_REG = CMSDK_WAVE_GEN_DRV_INT_SECONDADDR_CLR_Msk | CMSDK_WAVE_GEN_DRV_INT_EN_Msk;
NVIC_DisableIRQ(WG_DRV_IRQn);
DRVA->WAVE_GEN_DRV_INT_REG = 0;
TRIGGER_TIME_COUNT_FLAG |= (1<<i); //<2F><><EFBFBD><EFBFBD>Ⱥ<EFBFBD><C8BA>־<EFBFBD><D6BE>1
wave_gen_irq_occurred[i] = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
}
}