481 lines
19 KiB
C
481 lines
19 KiB
C
|
|
/*
|
|||
|
|
*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>ʱ<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>ʱ<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><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>ʱ<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>ʱ<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><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>ʱ<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>ʱ<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><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>ʱ<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>ʱ<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><EFBFBD>ʱ<EFBFBD><CAB1> <20><><EFBFBD><EFBFBD>
|
|||
|
|
},
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
/*-------------------------------------------------------------------------------------*/
|
|||
|
|
|
|||
|
|
/*-------------------------<2D><>ȡ<EFBFBD><C8A1>FT<46><54><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD>ʵ<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>ʵ<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><EFBFBD>оƬʱ<C6AC><CAB1><EFBFBD><EFBFBD><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><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><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><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><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>С<EFBFBD><D0A1><EFBFBD><EFBFBD>--------------------------------*/
|
|||
|
|
//<2F><><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><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>ֵ<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><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><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><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD><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><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD><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><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD><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
|
|||
|
|
// printf("%d\n",*(isel[0]+CHANNEL_X*64+j));
|
|||
|
|
}
|
|||
|
|
for(int k = 32 ; k<63 ; k++)
|
|||
|
|
{
|
|||
|
|
*(isel[0]+CHANNEL_X*64+k) =*(isel[0]+CHANNEL_X*64+(63-k)) ;
|
|||
|
|
// printf("%d\n",*(isel[0]+CHANNEL_X*64+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>̼<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><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>ʱ<EFBFBD><CAB1><EFBFBD><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><EFBFBD>STRUCT_WAVEFORM_PARA<52>ṹ<EFBFBD><E1B9B9><EFBFBD><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>ʱ<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><EFBFBD>-----------------------------------------*/
|
|||
|
|
volatile uint8_t statics_config=0; //<2F><>ȷ<EFBFBD><C8B7>ǰ<EFBFBD>м<EFBFBD><D0BC><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><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><><EFBFBD>缫ʹ<E7BCAB><CAB9>
|
|||
|
|
}
|
|||
|
|
WAVE_GEN_BLK->WAVE_GEN_DRV_CTRL_REG = 1;
|
|||
|
|
}
|
|||
|
|
/*--------------------------------------ֹͣ<CDA3><D6B9><EFBFBD><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>̼<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><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><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>ʵ<EFBFBD>ʵʱ<CAB5>ģ<DEB8><C4A3><EFBFBD><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><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><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>ʱ<EFBFBD><CAB1><EFBFBD><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>ʱ<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>̼<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><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><EFBFBD>
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|