104 lines
3.0 KiB
C
104 lines
3.0 KiB
C
/**
|
|
* @file laser_dac.c
|
|
* @brief External DAC access for laser-current and TEC channels.
|
|
*/
|
|
|
|
#include "laser_dac.h"
|
|
|
|
#include "board_io.h"
|
|
#include "main.h"
|
|
|
|
void laser_dac_write_channel(uint8_t channel, uint16_t value)
|
|
{
|
|
uint32_t timeout;
|
|
|
|
if ((channel == 1u) || (channel == 3u))
|
|
{
|
|
board_io_configure_spi2_mode(LL_SPI_POLARITY_HIGH, LL_SPI_PHASE_2EDGE);
|
|
HAL_GPIO_WritePin(AD9102_CS_GPIO_Port, AD9102_CS_Pin, GPIO_PIN_SET);
|
|
}
|
|
|
|
switch (channel)
|
|
{
|
|
case 1u:
|
|
HAL_GPIO_WritePin(DAC_LD1_CS_GPIO_Port, DAC_LD1_CS_Pin, GPIO_PIN_RESET);
|
|
timeout = 0u;
|
|
while ((!LL_SPI_IsActiveFlag_TXE(SPI2)) && (timeout <= 500u))
|
|
{
|
|
++timeout;
|
|
}
|
|
LL_SPI_TransmitData16(SPI2, value);
|
|
timeout = 0u;
|
|
while ((!LL_SPI_IsActiveFlag_RXNE(SPI2)) && (timeout <= 500u))
|
|
{
|
|
++timeout;
|
|
}
|
|
(void)SPI2->DR;
|
|
break;
|
|
|
|
case 2u:
|
|
if (!LL_SPI_IsEnabled(SPI6))
|
|
{
|
|
LL_SPI_Enable(SPI6);
|
|
}
|
|
HAL_GPIO_WritePin(DAC_LD2_CS_GPIO_Port, DAC_LD2_CS_Pin, GPIO_PIN_RESET);
|
|
timeout = 0u;
|
|
while ((!LL_SPI_IsActiveFlag_TXE(SPI6)) && (timeout <= 500u))
|
|
{
|
|
++timeout;
|
|
}
|
|
LL_SPI_TransmitData16(SPI6, value);
|
|
timeout = 0u;
|
|
while ((!LL_SPI_IsActiveFlag_RXNE(SPI6)) && (timeout <= 500u))
|
|
{
|
|
++timeout;
|
|
}
|
|
(void)SPI6->DR;
|
|
break;
|
|
|
|
case 3u:
|
|
HAL_GPIO_WritePin(DAC_TEC1_CS_GPIO_Port, DAC_TEC1_CS_Pin, GPIO_PIN_RESET);
|
|
timeout = 0u;
|
|
while ((!LL_SPI_IsActiveFlag_TXE(SPI2)) && (timeout <= 500u))
|
|
{
|
|
++timeout;
|
|
}
|
|
LL_SPI_TransmitData16(SPI2, value);
|
|
timeout = 0u;
|
|
while ((!LL_SPI_IsActiveFlag_RXNE(SPI2)) && (timeout <= 500u))
|
|
{
|
|
++timeout;
|
|
}
|
|
(void)SPI2->DR;
|
|
break;
|
|
|
|
case 4u:
|
|
if (!LL_SPI_IsEnabled(SPI6))
|
|
{
|
|
LL_SPI_Enable(SPI6);
|
|
}
|
|
HAL_GPIO_WritePin(DAC_TEC2_CS_GPIO_Port, DAC_TEC2_CS_Pin, GPIO_PIN_RESET);
|
|
timeout = 0u;
|
|
while ((!LL_SPI_IsActiveFlag_TXE(SPI6)) && (timeout <= 500u))
|
|
{
|
|
++timeout;
|
|
}
|
|
LL_SPI_TransmitData16(SPI6, value);
|
|
timeout = 0u;
|
|
while ((!LL_SPI_IsActiveFlag_RXNE(SPI6)) && (timeout <= 500u))
|
|
{
|
|
++timeout;
|
|
}
|
|
(void)SPI6->DR;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
HAL_GPIO_WritePin(DAC_LD1_CS_GPIO_Port, DAC_LD1_CS_Pin, GPIO_PIN_SET);
|
|
HAL_GPIO_WritePin(DAC_LD2_CS_GPIO_Port, DAC_LD2_CS_Pin, GPIO_PIN_SET);
|
|
HAL_GPIO_WritePin(DAC_TEC1_CS_GPIO_Port, DAC_TEC1_CS_Pin, GPIO_PIN_SET);
|
|
HAL_GPIO_WritePin(DAC_TEC2_CS_GPIO_Port, DAC_TEC2_CS_Pin, GPIO_PIN_SET);
|
|
}
|