/** * @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); }