Refactor split main.c
This commit is contained in:
261
Src/laser_hw.c
Normal file
261
Src/laser_hw.c
Normal file
@ -0,0 +1,261 @@
|
||||
#include "laser_hw.h"
|
||||
#include "app_state.h" /* hadc1, hadc3 — нужны для Get_ADC */
|
||||
|
||||
/* --- Set_LTEC, MPhD_T, Get_ADC, OUT_trigger из main.c --- */
|
||||
void OUT_trigger(uint8_t out_n)
|
||||
{
|
||||
switch (out_n)
|
||||
{
|
||||
case 0:
|
||||
HAL_GPIO_WritePin(OUT_0_GPIO_Port, OUT_0_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(OUT_0_GPIO_Port, OUT_0_Pin, GPIO_PIN_RESET);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
HAL_GPIO_WritePin(OUT_1_GPIO_Port, OUT_1_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(OUT_1_GPIO_Port, OUT_1_Pin, GPIO_PIN_RESET);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
HAL_GPIO_WritePin(OUT_2_GPIO_Port, OUT_2_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(OUT_2_GPIO_Port, OUT_2_Pin, GPIO_PIN_RESET);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
HAL_GPIO_WritePin(OUT_3_GPIO_Port, OUT_3_Pin, GPIO_PIN_SET);
|
||||
|
||||
HAL_GPIO_WritePin(OUT_3_GPIO_Port, OUT_3_Pin, GPIO_PIN_RESET);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
HAL_GPIO_WritePin(OUT_4_GPIO_Port, OUT_4_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(OUT_4_GPIO_Port, OUT_4_Pin, GPIO_PIN_RESET);
|
||||
break;
|
||||
|
||||
case 5:
|
||||
HAL_GPIO_WritePin(OUT_5_GPIO_Port, OUT_5_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(OUT_5_GPIO_Port, OUT_5_Pin, GPIO_PIN_RESET);
|
||||
break;
|
||||
|
||||
case 6:
|
||||
HAL_GPIO_WritePin(OUT_6_GPIO_Port, OUT_6_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(OUT_6_GPIO_Port, OUT_6_Pin, GPIO_PIN_RESET);
|
||||
break;
|
||||
|
||||
case 7:
|
||||
HAL_GPIO_WritePin(OUT_7_GPIO_Port, OUT_7_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(OUT_7_GPIO_Port, OUT_7_Pin, GPIO_PIN_RESET);
|
||||
break;
|
||||
|
||||
case 8:
|
||||
HAL_GPIO_WritePin(OUT_8_GPIO_Port, OUT_8_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(OUT_8_GPIO_Port, OUT_8_Pin, GPIO_PIN_RESET);
|
||||
break;
|
||||
|
||||
case 9:
|
||||
HAL_GPIO_WritePin(OUT_9_GPIO_Port, OUT_9_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(OUT_9_GPIO_Port, OUT_9_Pin, GPIO_PIN_RESET);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Set_LTEC(uint8_t num, uint16_t DATA)
|
||||
{
|
||||
uint32_t tmp32;
|
||||
|
||||
switch (num)
|
||||
{
|
||||
case 1:
|
||||
HAL_GPIO_WritePin(DAC_LD1_CS_GPIO_Port, DAC_LD1_CS_Pin, GPIO_PIN_RESET);//Start operation with LDAC1
|
||||
//tmp32=0;
|
||||
//while(tmp32<500){tmp32++;}
|
||||
tmp32 = 0;
|
||||
while((!LL_SPI_IsActiveFlag_TXE(SPI2))&&(tmp32<=500)) {tmp32++;}//When trans. last data cycle will be end.
|
||||
LL_SPI_TransmitData16(SPI2, DATA);//Transmit word to Laser1 DAC
|
||||
tmp32 = 0;
|
||||
while((!LL_SPI_IsActiveFlag_RXNE(SPI2))&&(tmp32<=500)) {tmp32++;}//When trans. last data cycle will be end.
|
||||
(void) SPI2->DR;
|
||||
break;
|
||||
case 2:
|
||||
//HAL_GPIO_TogglePin(OUT_11_GPIO_Port, OUT_11_Pin); //for debug purposes
|
||||
HAL_GPIO_WritePin(DAC_LD2_CS_GPIO_Port, DAC_LD2_CS_Pin, GPIO_PIN_RESET);//Start operation with LDAC2
|
||||
//tmp32=0;
|
||||
//while(tmp32<500){tmp32++;}
|
||||
tmp32 = 0;
|
||||
while((!LL_SPI_IsActiveFlag_TXE(SPI6))&&(tmp32<=500)) {tmp32++;}//When trans. last data cycle will be end.
|
||||
LL_SPI_TransmitData16(SPI6, DATA);//Transmit word to Laser1 DAC
|
||||
tmp32 = 0;
|
||||
while((!LL_SPI_IsActiveFlag_RXNE(SPI6))&&(tmp32<=500)) {tmp32++;}//When trans. last data cycle will be end.
|
||||
(void) SPI6->DR;
|
||||
break;
|
||||
case 3:
|
||||
HAL_GPIO_WritePin(DAC_TEC1_CS_GPIO_Port, DAC_TEC1_CS_Pin, GPIO_PIN_RESET);//Start operation with TECDAC1
|
||||
//tmp32=0;
|
||||
//while(tmp32<500){tmp32++;}
|
||||
tmp32 = 0;
|
||||
while((!LL_SPI_IsActiveFlag_TXE(SPI2))&&(tmp32<=500)) {tmp32++;}//When trans. last data cycle will be end.
|
||||
LL_SPI_TransmitData16(SPI2, DATA);//Transmit word to Laser1 DAC
|
||||
tmp32 = 0;
|
||||
while((!LL_SPI_IsActiveFlag_RXNE(SPI2))&&(tmp32<=500)) {tmp32++;}//When trans. last data cycle will be end.
|
||||
(void) SPI2->DR;
|
||||
break;
|
||||
case 4:
|
||||
HAL_GPIO_WritePin(DAC_TEC2_CS_GPIO_Port, DAC_TEC2_CS_Pin, GPIO_PIN_RESET);//Start operation with TECDAC2
|
||||
//tmp32=0;
|
||||
//while(tmp32<500){tmp32++;}
|
||||
tmp32 = 0;
|
||||
while((!LL_SPI_IsActiveFlag_TXE(SPI6))&&(tmp32<=500)) {tmp32++;}//When trans. last data cycle will be end.
|
||||
LL_SPI_TransmitData16(SPI6, DATA);//Transmit word to Laser1 DAC
|
||||
tmp32 = 0;
|
||||
while((!LL_SPI_IsActiveFlag_RXNE(SPI6))&&(tmp32<=500)) {tmp32++;}//When trans. last data cycle will be end.
|
||||
(void) SPI6->DR;
|
||||
break;
|
||||
}
|
||||
HAL_GPIO_WritePin(DAC_LD1_CS_GPIO_Port, DAC_LD1_CS_Pin, GPIO_PIN_SET);//End operation with LDAC1
|
||||
HAL_GPIO_WritePin(DAC_LD2_CS_GPIO_Port, DAC_LD2_CS_Pin, GPIO_PIN_SET);//End operation with LDAC2
|
||||
HAL_GPIO_WritePin(DAC_TEC1_CS_GPIO_Port, DAC_TEC1_CS_Pin, GPIO_PIN_SET);//End operation with TEC1
|
||||
HAL_GPIO_WritePin(DAC_TEC2_CS_GPIO_Port, DAC_TEC2_CS_Pin, GPIO_PIN_SET);//End operation with TEC2
|
||||
}
|
||||
uint16_t MPhD_T(uint8_t num)
|
||||
{
|
||||
uint16_t P;
|
||||
uint32_t tmp32;
|
||||
HAL_GPIO_WritePin(SPI4_CNV_GPIO_Port, SPI4_CNV_Pin, GPIO_PIN_RESET);//Prepare conversion
|
||||
HAL_GPIO_WritePin(SPI5_CNV_GPIO_Port, SPI5_CNV_Pin, GPIO_PIN_RESET);//Prepare conversion
|
||||
tmp32=0;
|
||||
while(tmp32<500){tmp32++;}
|
||||
HAL_GPIO_WritePin(SPI4_CNV_GPIO_Port, SPI4_CNV_Pin, GPIO_PIN_SET);//Stop acqusition & start conversion
|
||||
HAL_GPIO_WritePin(SPI5_CNV_GPIO_Port, SPI5_CNV_Pin, GPIO_PIN_SET);//Stop acqusition & start conversion
|
||||
tmp32=0;
|
||||
while(tmp32<500){tmp32++;}
|
||||
if (num==1)//MPD1
|
||||
{
|
||||
HAL_GPIO_WritePin(ADC_ThrLD1_CS_GPIO_Port, ADC_ThrLD1_CS_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(ADC_MPD1_CS_GPIO_Port, ADC_MPD1_CS_Pin, GPIO_PIN_RESET);
|
||||
tmp32=0;
|
||||
while(tmp32<500){tmp32++;}
|
||||
//LL_SPI_TransmitData16(SPI4, 0xFFFF);//We must to clock the CLK output for collect RX data. We can do that only by transmitting data...
|
||||
LL_SPI_Enable(SPI4);//Enable SPI for MPhD1 ADC
|
||||
tmp32 = 0;
|
||||
while(((!LL_SPI_IsActiveFlag_RXNE(SPI4))&&(tmp32<=1000))) {tmp32++;}//When rec. last data cycle will be end.
|
||||
LL_SPI_Disable(SPI4);//Enable SPI for MPhD1 ADC
|
||||
while(tmp32<500){tmp32++;}
|
||||
//HAL_SPI_Receive(&hspi4, &P[0], 1, 100);
|
||||
HAL_GPIO_WritePin(ADC_MPD1_CS_GPIO_Port, ADC_MPD1_CS_Pin, GPIO_PIN_SET);
|
||||
P = LL_SPI_ReceiveData16(SPI4);
|
||||
}
|
||||
else if (num==2)//MPD2
|
||||
{
|
||||
HAL_GPIO_WritePin(ADC_ThrLD2_CS_GPIO_Port, ADC_ThrLD2_CS_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(ADC_MPD2_CS_GPIO_Port, ADC_MPD2_CS_Pin, GPIO_PIN_RESET);
|
||||
tmp32=0;
|
||||
while(tmp32<500){tmp32++;}
|
||||
//LL_SPI_TransmitData16(SPI5, 0xFFFF);//We must to clock the CLK output for collect RX data. We can do that only by transmitting data...
|
||||
LL_SPI_Enable(SPI5);//Enable SPI for MPhD2 ADC
|
||||
tmp32 = 0;
|
||||
while(((!LL_SPI_IsActiveFlag_RXNE(SPI5))&&(tmp32<=1000))) {tmp32++;}//When rec. last data cycle will be end.
|
||||
LL_SPI_Disable(SPI5);//Enable SPI for MPhD2 ADC
|
||||
while(tmp32<500){tmp32++;}
|
||||
//HAL_SPI_Receive(&hspi4, &P[0], 1, 100);
|
||||
HAL_GPIO_WritePin(ADC_MPD2_CS_GPIO_Port, ADC_MPD2_CS_Pin, GPIO_PIN_SET);
|
||||
P = LL_SPI_ReceiveData16(SPI5);
|
||||
}
|
||||
else if (num==3)//ThrLD1
|
||||
{
|
||||
HAL_GPIO_WritePin(ADC_MPD1_CS_GPIO_Port, ADC_MPD1_CS_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(ADC_ThrLD1_CS_GPIO_Port, ADC_ThrLD1_CS_Pin, GPIO_PIN_RESET);
|
||||
tmp32=0;
|
||||
while(tmp32<500){tmp32++;}
|
||||
//LL_SPI_TransmitData16(SPI4, 0xFFFF);//We must to clock the CLK output for collect RX data. We can do that only by transmitting data...
|
||||
LL_SPI_Enable(SPI4);//Enable SPI for ThrLD1 ADC
|
||||
tmp32 = 0;
|
||||
while(((!LL_SPI_IsActiveFlag_RXNE(SPI4))&&(tmp32<=1000))) {tmp32++;}//When rec. last data cycle will be end.
|
||||
LL_SPI_Disable(SPI4);//Enable SPI for ThrLD1 ADC
|
||||
while(tmp32<500){tmp32++;}
|
||||
//HAL_SPI_Receive(&hspi4, &P[0], 1, 100);
|
||||
HAL_GPIO_WritePin(ADC_ThrLD1_CS_GPIO_Port, ADC_ThrLD1_CS_Pin, GPIO_PIN_SET);
|
||||
P = LL_SPI_ReceiveData16(SPI4);
|
||||
}
|
||||
else if (num==4)//ThrLD2
|
||||
{
|
||||
HAL_GPIO_WritePin(ADC_MPD2_CS_GPIO_Port, ADC_MPD2_CS_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(ADC_ThrLD2_CS_GPIO_Port, ADC_ThrLD2_CS_Pin, GPIO_PIN_RESET);
|
||||
tmp32=0;
|
||||
while(tmp32<500){tmp32++;}
|
||||
//LL_SPI_TransmitData16(SPI5, 0xFFFF);//We must to clock the CLK output for collect RX data. We can do that only by transmitting data...
|
||||
LL_SPI_Enable(SPI5);//Enable SPI for ThrLD2 ADC
|
||||
tmp32 = 0;
|
||||
while(((!LL_SPI_IsActiveFlag_RXNE(SPI5))&&(tmp32<=1000))) {tmp32++;}//When rec. last data cycle will be end.
|
||||
LL_SPI_Disable(SPI5);//Enable SPI for ThrLD2 ADC
|
||||
while(tmp32<500){tmp32++;}
|
||||
//HAL_SPI_Receive(&hspi4, &P[0], 1, 100);
|
||||
HAL_GPIO_WritePin(ADC_ThrLD2_CS_GPIO_Port, ADC_ThrLD2_CS_Pin, GPIO_PIN_SET);
|
||||
P = LL_SPI_ReceiveData16(SPI5);
|
||||
}
|
||||
/*float I_LD, Ith, I0m, T0m, Inorm, Tnorm1, Tnorm2, P, T_C, A, Pnorm;
|
||||
|
||||
Inorm = (float) (65535) / (float) (100);
|
||||
Tnorm1 = (float) (65535) / (float) (50);
|
||||
Tnorm2 = 4;
|
||||
Pnorm = (float)(65535) / (float)(20);
|
||||
I0m = 8.1568;//@4 C - lowest temperature of system
|
||||
T0m = 48.6282;
|
||||
T_C = (float) (T_LD) / Tnorm1 + Tnorm2;
|
||||
|
||||
Ith = I0m * expf(T_C/T0m);
|
||||
I_LD = (float) (C_LD) / Inorm;
|
||||
|
||||
if (I_LD > Ith)
|
||||
{
|
||||
A = (float) (2.24276128270098e-07) * T_C * T_C * T_C - (float) (4.73392579025590e-05) * T_C * T_C + (float) (0.00157250618257057) * T_C + (float) (0.228565407377466);
|
||||
P = A * (I_LD - Ith) * Pnorm;
|
||||
}
|
||||
else
|
||||
{
|
||||
P = 0;
|
||||
} */
|
||||
return P;
|
||||
}
|
||||
/*static uint16_t Temp_LD(uint16_t T_LD_before, uint16_t T_LD, uint32_t Timer_before, uint32_t Timer)
|
||||
{
|
||||
uint16_t Result;
|
||||
// uint8_t randf;
|
||||
|
||||
randf = 0;
|
||||
for (uint8_t i = 0; i < 32; i++)
|
||||
{
|
||||
randf = ((Timer>>i)&0x0001)^randf;
|
||||
}
|
||||
|
||||
Result = ((float)(T_LD - T_LD_before))*((float)(1-expf(((float)(Timer_before)-(float)(Timer))/((float)(100))))) + T_LD_before + (float)(randf);
|
||||
|
||||
return (uint16_t)(Result);
|
||||
}*/
|
||||
uint16_t Get_ADC(uint8_t num)
|
||||
{
|
||||
uint16_t OUT;
|
||||
switch (num)
|
||||
{
|
||||
case 0:
|
||||
HAL_ADC_Start(&hadc1); // Power on
|
||||
break;
|
||||
case 1:
|
||||
HAL_ADC_PollForConversion(&hadc1, 100); // Waiting for conversion
|
||||
OUT = HAL_ADC_GetValue(&hadc1); // Get value adc
|
||||
break;
|
||||
case 2:
|
||||
HAL_ADC_Stop(&hadc1); // Power off
|
||||
break;
|
||||
case 3:
|
||||
HAL_ADC_Start(&hadc3); // Power on
|
||||
break;
|
||||
case 4:
|
||||
HAL_ADC_PollForConversion(&hadc3, 100); // Waiting for conversion
|
||||
OUT = HAL_ADC_GetValue(&hadc3); // Get value adc
|
||||
break;
|
||||
case 5:
|
||||
HAL_ADC_Stop(&hadc3); // Power off
|
||||
break;
|
||||
}
|
||||
return OUT;
|
||||
}
|
||||
Reference in New Issue
Block a user