Files
CHJ/user/Core/D9V2FR_DP1703V10.c

317 lines
9.6 KiB
C
Raw Permalink Normal View History

2026-03-20 21:16:58 +08:00
#include "../main/SystemInclude.h"
#if(DP1703COREV10)
__SAMPLE_STATUS_BIT_TypeDef sampleState;
u16 offsetRType, offsetGCFX;
TypeSample sampleData;
u16 processNextTime, processIndex;
u16 voltageDetected[ANX], adcGain;
volatile u32 sleeptime ,flag_sleep;
//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ж<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>Ӵ˽<D3B4><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>--------------------------------------------------------------
void SHAL_LPTIMER0_IRQ_Callback(LPTIM_TypeDef *lptimer, uint16_t irq_type)
{
LPTIM_ClearITPendingBit(lptimer,irq_type);//<2F><><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־λ
StartNormolFlowMeasurement();//ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD>źŵIJ<C5B5><C4B2><EFBFBD>
sleeptime++;
if (sleeptime ==20 || sleeptime ==21){flag_sleep = 1 ;}//sleeptime = 0 ;
if (sleeptime >40 )TOGGLE_PIN(pGPIO1, GPIO_Pin_7);
}
/*==========================================================================================
//<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 SHAL_SamplingTime_IRQ_Callback(TIMER_TypeDef *timer, uint16_t irq_type)
{
TIM_ClearITPendingBit(timer, irq_type);//<2F><><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־ FlowProcessManagement();
if (irq_type & TIM_IT_Update) {// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
}
if (irq_type & TIM_IT_CC1) { // <20><><EFBFBD><EFBFBD><EFBFBD>Ƚ<EFBFBD><C8BD>ж<EFBFBD>
FlowProcessManagement();
}
}
void StartNormolFlowMeasurement(void)//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
// ManagePrimaryProcess();//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ADC0_1_StopSYNC_Conversion();
HWState.SampledOver = 0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>
StartSamplingTimeInterval(32768); //<2F><><EFBFBD><EFBFBD><EFBFBD>Ƚ϶<C8BD>ʱ<EFBFBD><CAB1>,<2C><>ʼ<EFBFBD><CABC>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SHAL_timer_register_irq_callback(SamplingTIM,SHAL_SamplingTime_IRQ_Callback );//ע<><D7A2><EFBFBD>жϻص<CFBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
processIndex = 0; //
processNextTime = 0;
FlowProcessManagement();//<2F><><EFBFBD>ڿ<EFBFBD>ʼ<EFBFBD>״<EFBFBD><D7B4><EFBFBD><EFBFBD><EFBFBD>
}
void ReadSamplingData(void)//ADC<44>ж϶<D0B6>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> BPS
{
sampleData.ADCBuffer[0] += ADC_ReadData(ADC0); //<2F><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD>ۼ<EFBFBD>
sampleData.ADCBuffer[1] += ADC_ReadData(ADC1); //<2F><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD>ۼ<EFBFBD>
// TOGGLE_PIN(pGPIO0, GPIO_Pin_5);//TEST PIN
sampleData.Counter++; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(sampleData.Counter < sampleData.CounterMax) return;
}
void ComputeSampleData(void) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
ADC0_1_StopSYNC_Conversion();
if(sampleData.Counter != 0)//<2F>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>
{
sampleData.ADCBuffer[0] /= (u32)sampleData.Counter;
sampleData.ADCBuffer[1] /= (u32)sampleData.Counter;
}
}
void SetSystemForADCSample(u16 SampleSiagnl)//<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
sampleData.ADCBuffer[0] = 0;
sampleData.ADCBuffer[1] = 0;
sampleData.Counter = 0;
switch(SampleSiagnl)
{
case SIGNAL0: {
ADC0_1_StartSYNC_Conversion( GAIN_32, ADC0_PCHAN_AIN0, ADC0_NCHAN_AIN1, //CTCODE
GAIN_1, ADC1_PCHAN_AIN2, ADC1_NCHAN_AVSS); //RTCODE
}break;
case SIGNAL1: {
ADC0_1_StartSYNC_Conversion( GAIN_128, ADC0_PCHAN_AIN0, ADC0_NCHAN_AIN1, //HTCODE
GAIN_1, ADC1_PCHAN_AIN3, ADC1_NCHAN_AIN4); //ATCODE
}break;
case SIGNAL2: {
ADC0_1_StartSYNC_Conversion( GAIN_32, ADC0_PCHAN_AIN0, ADC0_NCHAN_AIN1, //CTCODE
GAIN_8, ADC1_PCHAN_AIN5, ADC1_NCHAN_AIN4); //BTCODE
}break;
case SIGNAL3: {
ADC0_1_StartSYNC_Conversion( GAIN_128, ADC0_PCHAN_AIN0, ADC0_NCHAN_AIN1, //HTCODE
GAIN_1, ADC1_PCHAN_AIN2, ADC1_NCHAN_AVSS); //RTCODE
}break;
case SIGNAL4: {
ADC0_1_StartSYNC_Conversion( GAIN_32, ADC0_PCHAN_AIN0, ADC0_NCHAN_AIN1, //CTCODE
GAIN_1, ADC1_PCHAN_AIN3, ADC1_NCHAN_AIN4); //ATCODE
}break;
case SIGNAL5: {
ADC0_1_StartSYNC_Conversion( GAIN_128, ADC0_PCHAN_AIN0, ADC0_NCHAN_AIN1, //HTCODE
GAIN_8, ADC1_PCHAN_AIN5, ADC1_NCHAN_AIN4); //BTCODE
}break;
}
}
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){
StopSamplingTimeInterval();//<2F>رղɼ<D5B2>ʱ<EFBFBD><CAB1>
return;
}
u32 currentTAR;
currentTAR = (u32)GetSamplingTimeCounter();//<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ֵ
if(currentTAR > processNextTime) processNextTime = currentTAR + 5;
ResetSamplingTimeInterval(processNextTime);
}
void FlowProcessManagement(void)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̹<EFBFBD><CCB9><EFBFBD>
{
switch(processIndex)
{
case 0:
{
HWState.SampledOver = 0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ
SetSystemForADCSample(SIGNAL0);//<2F><>ʼ<EFBFBD>ɼ<EFBFBD>SIGNAL0
processNextTime += 655; //20ms <20><><EFBFBD><EFBFBD>ֵ=65535/4000*t =
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
processNextTime += 655;//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>SIGNAL1
processNextTime += 655;//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>SIGNAL1
processNextTime += 655;//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>SIGNAL1
processNextTime += 655;//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>SIGNAL1
processNextTime += 655;//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>
StopSamplingTimeInterval();//<2F>رղɼ<D5B2>ʱ<EFBFBD><CAB1>
processIndex = 7;
}break;
default : processIndex = 0; break;
}
SetNextProcess();
}
#endif