NULL
This commit is contained in:
299
user/Core/FS5001_H2.c
Executable file
299
user/Core/FS5001_H2.c
Executable file
@@ -0,0 +1,299 @@
|
||||
#include "../main/SystemInclude.h"
|
||||
|
||||
#if(DP0000_FS5001_H2)
|
||||
|
||||
__SAMPLE_STATUS_BIT_TypeDef sampleState;
|
||||
u16 offsetRType, offsetGCFX;
|
||||
|
||||
|
||||
u16 processNextTime, processIndex;
|
||||
|
||||
u16 voltageDetected[ANX], adcGain;
|
||||
|
||||
|
||||
|
||||
/*==========================================================================================
|
||||
//<2F>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸
|
||||
==========================================================================================*/
|
||||
void TestTemperatureInit(void)//<2F>¶Ȳ<C2B6><C8B2>Գ<EFBFBD>ʼ<EFBFBD><CABC>
|
||||
{
|
||||
WriteWordRegister(CONFIG, CONVERSION);
|
||||
WriteByteRegister(RREG, RESULT_0_25_BIT);
|
||||
|
||||
HWState.EnableTempInit = 0;
|
||||
}
|
||||
|
||||
u32 tempLongInt;
|
||||
void TestTemperature(void)//<2F>¶Ȳ<C2B6><C8B2><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡTPCB
|
||||
{
|
||||
if(!HWState.EnableTempTest) return;
|
||||
if(HWState.EnableTempInit) return;
|
||||
|
||||
|
||||
voltageDetected[TPCB] = ReadWordRegister(TA);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭʼֵ
|
||||
WriteWordRegister(CONFIG, SHUT_DOWN);//<2F>¶ȴ<C2B6><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
voltageDetected[TPCB] &= 0x1fff;
|
||||
tempLongInt = (u32)(voltageDetected[TPCB] & 0xFFF);
|
||||
if(voltageDetected[TPCB] >= 0x1000) tempLongInt = 0xFFF - tempLongInt;
|
||||
tempLongInt *= 6400; // 0.0625*1024*100
|
||||
tempLongInt >>= 10; // /1024
|
||||
PCBTemperature = (u16)tempLongInt; // Temperature*100
|
||||
voltageDetected[TPCB] =PCBTemperature;
|
||||
|
||||
__NOP();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*==========================================================================================
|
||||
//<2F><><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD>
|
||||
==========================================================================================*/
|
||||
|
||||
/*********************************************************************/
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD>
|
||||
/*********************************************************************/
|
||||
|
||||
void FlowRateDealAndOuputSub(void)
|
||||
{
|
||||
ComputeFlowRateIndexAndFlowRate();//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
TestTemperature();//<2F><><EFBFBD><EFBFBD>PCB<43>¶<EFBFBD>
|
||||
|
||||
}
|
||||
|
||||
void ComputeFlowRateIndexAndFlowRate(void)
|
||||
{
|
||||
voltageDetected[NIDX ]= (u16)sampleData.TCode[CTCode]; ///gain=32 VDU
|
||||
voltageDetected[VRHX ]= (u16)sampleData.TCode[HTCode]; ///gain=128 VDU
|
||||
voltageDetected[IVHDX]= (u16)sampleData.TCode[RTCode]; ///gain=1 VRH
|
||||
voltageDetected[RHVOL]= (u16)sampleData.TCode[ATCode]; ///gain=8 VRR
|
||||
voltageDetected[VDUGX]= (u16)sampleData.TCode[BTCode]; ///gain=8 VIH
|
||||
|
||||
//voltageDetected[FRIDX]=voltageDetected[NIDX]- offsetGas;
|
||||
|
||||
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//1---<2D><><EFBFBD><EFBFBD>VRHԭʼֵ<CABC>ж<EFBFBD>
|
||||
// if(voltageDetected[IVHDX]<56000) voltageDetected[FRIDX]=voltageDetected[NIDX ]- offsetAir; //Air
|
||||
// else voltageDetected[FRIDX]=voltageDetected[VRHX ]- offsetAir; //H2
|
||||
|
||||
if(offsetAir)voltageDetected[FRIDX]=voltageDetected[NIDX ]- offsetGas; //Air
|
||||
else voltageDetected[FRIDX]=voltageDetected[VRHX ]- offsetGas; //H2
|
||||
|
||||
currentFlowRate = GetFlowRate(voltageDetected[FRIDX],CURVE_1ST);
|
||||
// flowRateH
|
||||
// flowRateL
|
||||
voltageDetected[FR_H] = currentFlowRate >> 16;
|
||||
voltageDetected[FR_L] = currentFlowRate&0xFFFF;
|
||||
// voltageDetected[VDUGX]= AirflowSensor_Read();
|
||||
// voltageDetected[TPCB]= (u16)(Get_AirflowSensor_SCCM());
|
||||
|
||||
}
|
||||
u16 WordSubFunction(u16 minuend, u16 subtractor)
|
||||
{
|
||||
u16 subResult;
|
||||
|
||||
subResult = minuend - subtractor;
|
||||
if(minuend >= subtractor)
|
||||
{
|
||||
if(subResult < 32768) subResult += 32768;
|
||||
else subResult = 65535;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(subResult < 32768) subResult = 0;
|
||||
else subResult -= 32768;
|
||||
}
|
||||
|
||||
return subResult;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/********************************************************************/
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/********************************************************************/
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
void SamplingTimer_IRQ_Callback(void)
|
||||
{
|
||||
FlowProcessManagement();
|
||||
|
||||
// LHL_GPIO_TogglePin(pGPIO1, GPIO_PIN_7);
|
||||
}
|
||||
|
||||
|
||||
void StartNormolFlowMeasurement(void)//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
HWState.SampledOver = 0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>
|
||||
StartSamplingTimerInterval(32768); //<2F><><EFBFBD><EFBFBD><EFBFBD>Ƚ϶<C8BD>ʱ<EFBFBD><CAB1>,<2C><>ʼ<EFBFBD><CABC>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
Timer_register_irq_callback(SamplingTimer,SamplingTimer_IRQ_Callback );//ע<><D7A2><EFBFBD>жϻص<CFBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
processIndex = 0;
|
||||
processNextTime = 0;
|
||||
FlowProcessManagement();//ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
|
||||
static void SetSystemForADCSample(u16 SampleSiagnl)//<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
switch(SampleSiagnl)
|
||||
{
|
||||
case SIGNAL0:{
|
||||
sampleData.adcConfig.Gain0 = GAIN32;
|
||||
sampleData.adcConfig.PChan0 = ADC0_AIN0;
|
||||
sampleData.adcConfig.NChan0 = ADC0_AIN1; //CTCODE
|
||||
sampleData.adcConfig.Gain1 = GAIN1;
|
||||
sampleData.adcConfig.PChan1 = ADC1_AIN2; //RTCODE
|
||||
sampleData.adcConfig.NChan1 = ADC1_AVSS;
|
||||
sampleData.adcConfig.SPS = SPS_977;
|
||||
}break;
|
||||
case SIGNAL1: {
|
||||
sampleData.adcConfig.Gain0 = GAIN128;
|
||||
sampleData.adcConfig.PChan0 = ADC0_AIN0;
|
||||
sampleData.adcConfig.NChan0 = ADC0_AIN1; //HTCODE
|
||||
sampleData.adcConfig.Gain1 = GAIN1;
|
||||
sampleData.adcConfig.PChan1 = ADC1_AIN5; //ATCODE
|
||||
sampleData.adcConfig.NChan1 = ADC1_AVSS;
|
||||
sampleData.adcConfig.SPS = SPS_977;
|
||||
}break;
|
||||
case SIGNAL2: {
|
||||
sampleData.adcConfig.Gain0 = GAIN32;
|
||||
sampleData.adcConfig.PChan0 = ADC0_AIN0;//CTCODE
|
||||
sampleData.adcConfig.NChan0 = ADC0_AIN1;
|
||||
sampleData.adcConfig.Gain1 = GAIN1;
|
||||
sampleData.adcConfig.PChan1 = ADC1_AIN3;//BTCODE
|
||||
sampleData.adcConfig.NChan1 = ADC1_AVSS;
|
||||
sampleData.adcConfig.SPS = SPS_977;
|
||||
}break;
|
||||
case SIGNAL3: {
|
||||
sampleData.adcConfig.Gain0 = GAIN128;
|
||||
sampleData.adcConfig.PChan0 = ADC0_AIN0;//HTCODE
|
||||
sampleData.adcConfig.NChan0 = ADC0_AIN1;
|
||||
sampleData.adcConfig.Gain1 = GAIN1;
|
||||
sampleData.adcConfig.PChan1 = ADC1_AIN2;//RTCODE
|
||||
sampleData.adcConfig.NChan1 = ADC1_AVSS;
|
||||
sampleData.adcConfig.SPS = SPS_977;
|
||||
}break;
|
||||
case SIGNAL4: {
|
||||
sampleData.adcConfig.Gain0 = GAIN32;
|
||||
sampleData.adcConfig.PChan0 = ADC0_AIN0;//CTCODE
|
||||
sampleData.adcConfig.NChan0 = ADC0_AIN1;
|
||||
sampleData.adcConfig.Gain1 = GAIN1;
|
||||
sampleData.adcConfig.PChan1 = ADC1_AIN5;//ATCODE
|
||||
sampleData.adcConfig.NChan1 = ADC1_AVSS;
|
||||
sampleData.adcConfig.SPS = SPS_977;
|
||||
}break;
|
||||
case SIGNAL5: {
|
||||
sampleData.adcConfig.Gain0 = GAIN128;
|
||||
sampleData.adcConfig.PChan0 = ADC0_AIN0;//HTCODE
|
||||
sampleData.adcConfig.NChan0 = ADC0_AIN1;
|
||||
sampleData.adcConfig.Gain1 = GAIN1;
|
||||
sampleData.adcConfig.PChan1 = ADC1_AIN3;//BTCODE
|
||||
sampleData.adcConfig.NChan1 = ADC1_AVSS;
|
||||
sampleData.adcConfig.SPS = SPS_977;
|
||||
}break;
|
||||
}
|
||||
}
|
||||
|
||||
static void SetNextProcess(void)//<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
if(processIndex == 0){
|
||||
StopSamplingTimerInterval();//<2F>رղɼ<D5B2>ʱ<EFBFBD><CAB1>
|
||||
return;
|
||||
}
|
||||
u32 currentTAR = SamplingTimer->CNT;//<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ֵ
|
||||
if(currentTAR > processNextTime) processNextTime = currentTAR + 5;
|
||||
ResetSamplingTimerInterval(processNextTime);
|
||||
}
|
||||
|
||||
void FlowProcessManagement(void)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̹<EFBFBD><CCB9><EFBFBD>״̬<D7B4><CCAC>
|
||||
{
|
||||
switch(processIndex)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
HWState.SampledOver = 0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ
|
||||
SetSystemForADCSample(SIGNAL0);//<2F><><EFBFBD><EFBFBD>SIGNAL0
|
||||
StartADCSyncSampingData();//<2F><>ʼ<EFBFBD>ɼ<EFBFBD>
|
||||
processNextTime += 327; //20ms <20><><EFBFBD><EFBFBD>ֵ=65535/4000*t = 327
|
||||
processIndex = 1;
|
||||
}break;
|
||||
|
||||
case 1:
|
||||
{
|
||||
ComputeSampleData(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
sampleData.TCode[CTCode] = sampleData.ADCBuffer[0];//<2F><><EFBFBD>뻺<EFBFBD><EBBBBA>
|
||||
sampleData.TCode[RTCode] = sampleData.ADCBuffer[1];//<2F><><EFBFBD>뻺<EFBFBD><EBBBBA>
|
||||
SetSystemForADCSample(SIGNAL1);//<2F><><EFBFBD><EFBFBD>SIGNAL1
|
||||
StartADCSyncSampingData();//<2F><>ʼ<EFBFBD>ɼ<EFBFBD>
|
||||
processNextTime += 327;//20ms
|
||||
processIndex = 2;
|
||||
}break;
|
||||
|
||||
case 2:
|
||||
{
|
||||
ComputeSampleData(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
sampleData.TCode[HTCode] = sampleData.ADCBuffer[0];//<2F><><EFBFBD>뻺<EFBFBD><EBBBBA>
|
||||
sampleData.TCode[ATCode] = sampleData.ADCBuffer[1];//<2F><><EFBFBD>뻺<EFBFBD><EBBBBA>
|
||||
SetSystemForADCSample(SIGNAL2);//<2F><><EFBFBD><EFBFBD>SIGNAL2
|
||||
StartADCSyncSampingData();//<2F><>ʼ<EFBFBD>ɼ<EFBFBD>
|
||||
processNextTime += 327;//20ms
|
||||
processIndex = 3;
|
||||
}break;
|
||||
case 3:
|
||||
{
|
||||
ComputeSampleData(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
sampleData.TCode[CTCode] += sampleData.ADCBuffer[0];//<2F><><EFBFBD>뻺<EFBFBD><EBBBBA>
|
||||
sampleData.TCode[BTCode] = sampleData.ADCBuffer[1];//<2F><><EFBFBD>뻺<EFBFBD><EBBBBA>
|
||||
SetSystemForADCSample(SIGNAL3);//<2F><><EFBFBD><EFBFBD>SIGNAL3
|
||||
StartADCSyncSampingData();//<2F><>ʼ<EFBFBD>ɼ<EFBFBD>
|
||||
processNextTime += 327;//20ms
|
||||
processIndex = 4;
|
||||
}break;
|
||||
case 4:
|
||||
{
|
||||
ComputeSampleData(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
sampleData.TCode[HTCode] += sampleData.ADCBuffer[0];//<2F><><EFBFBD>뻺<EFBFBD><EBBBBA>
|
||||
sampleData.TCode[RTCode] += sampleData.ADCBuffer[1];//<2F><><EFBFBD>뻺<EFBFBD><EBBBBA>
|
||||
SetSystemForADCSample(SIGNAL4);//<2F><><EFBFBD><EFBFBD>SIGNAL4
|
||||
StartADCSyncSampingData();//<2F><>ʼ<EFBFBD>ɼ<EFBFBD>
|
||||
processNextTime += 327;//20ms
|
||||
processIndex = 5;
|
||||
}break;
|
||||
|
||||
case 5:
|
||||
{
|
||||
|
||||
ComputeSampleData(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
sampleData.TCode[CTCode] += sampleData.ADCBuffer[0];//<2F><><EFBFBD>뻺<EFBFBD><EBBBBA>
|
||||
sampleData.TCode[ATCode] += sampleData.ADCBuffer[1];//<2F><><EFBFBD>뻺<EFBFBD><EBBBBA>
|
||||
SetSystemForADCSample(SIGNAL5);//<2F><><EFBFBD><EFBFBD>SIGNAL5
|
||||
StartADCSyncSampingData();//<2F><>ʼ<EFBFBD>ɼ<EFBFBD>
|
||||
processNextTime += 327;//20ms
|
||||
processIndex = 6;
|
||||
}break;
|
||||
|
||||
case 6:
|
||||
{
|
||||
|
||||
ComputeSampleData(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
sampleData.TCode[HTCode] += sampleData.ADCBuffer[0];//<2F><><EFBFBD>뻺<EFBFBD><EBBBBA>
|
||||
sampleData.TCode[BTCode] += sampleData.ADCBuffer[1];//<2F><><EFBFBD>뻺<EFBFBD><EBBBBA>
|
||||
|
||||
sampleData.TCode[CTCode] /= 3 ;//gain=32 VDU
|
||||
sampleData.TCode[HTCode] /= 3 ;//gain=128 VDU
|
||||
sampleData.TCode[RTCode] /= 2 ;//gain=1 VRH
|
||||
sampleData.TCode[ATCode] /= 2 ;//gain=8 VRR
|
||||
sampleData.TCode[BTCode] /= 2 ;//gain=8 VIH
|
||||
|
||||
HWState.SampledOver = 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
StopSamplingTimerInterval();//<2F>رղɼ<D5B2>ʱ<EFBFBD><CAB1>
|
||||
processIndex = 7;
|
||||
}break;
|
||||
default : processIndex = 0; break;
|
||||
}
|
||||
SetNextProcess();
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user