added AD9833 and DS1809 support
This commit is contained in:
482
Src/main.c
482
Src/main.c
@ -80,6 +80,7 @@
|
||||
#define AD9102_SRAM_START_DELAY_BASE_DEFAULT 0x1u
|
||||
#define AD9102_SRAM_START_DLY_DEFAULT 0x0000u
|
||||
#define AD9102_SRAM_HOLD_DEFAULT 0x1u
|
||||
#define AD9102_SRAM_AMP_DEFAULT 8191u
|
||||
#define AD9102_SRAM_SAMPLES_DEFAULT 16u
|
||||
#define AD9102_SRAM_MAX_SAMPLES 4096u
|
||||
#define AD9102_SRAM_RAMP_MIN (-8192)
|
||||
@ -95,6 +96,13 @@
|
||||
#define AD9102_FLAG_ENABLE 0x0001u
|
||||
#define AD9102_FLAG_TRIANGLE 0x0002u
|
||||
#define AD9102_FLAG_SRAM 0x0004u
|
||||
#define AD9102_FLAG_SRAM_FMT 0x0008u
|
||||
|
||||
#define AD9833_FLAG_ENABLE 0x0001u
|
||||
#define AD9833_FLAG_TRIANGLE 0x0002u
|
||||
#define DS1809_FLAG_UC 0x0001u
|
||||
#define DS1809_FLAG_DC 0x0002u
|
||||
#define DS1809_PULSE_MS_DEFAULT 2u
|
||||
/* USER CODE END PD */
|
||||
|
||||
/* Private macro -------------------------------------------------------------*/
|
||||
@ -108,10 +116,11 @@ ADC_HandleTypeDef hadc3;
|
||||
|
||||
SD_HandleTypeDef hsd1;
|
||||
|
||||
TIM_HandleTypeDef htim4;
|
||||
TIM_HandleTypeDef htim8;
|
||||
TIM_HandleTypeDef htim10;
|
||||
TIM_HandleTypeDef htim11;
|
||||
TIM_HandleTypeDef htim4;
|
||||
TIM_HandleTypeDef htim8;
|
||||
TIM_HandleTypeDef htim1;
|
||||
TIM_HandleTypeDef htim10;
|
||||
TIM_HandleTypeDef htim11;
|
||||
|
||||
UART_HandleTypeDef huart8;
|
||||
|
||||
@ -188,11 +197,12 @@ static void MX_USART1_UART_Init(void);
|
||||
static void MX_SDMMC1_SD_Init(void);
|
||||
static void MX_TIM7_Init(void);
|
||||
static void MX_TIM6_Init(void);
|
||||
static void MX_TIM10_Init(void);
|
||||
static void MX_UART8_Init(void);
|
||||
static void MX_TIM8_Init(void);
|
||||
static void MX_TIM11_Init(void);
|
||||
static void MX_TIM4_Init(void);
|
||||
static void MX_TIM10_Init(void);
|
||||
static void MX_UART8_Init(void);
|
||||
static void MX_TIM8_Init(void);
|
||||
static void MX_TIM11_Init(void);
|
||||
static void MX_TIM4_Init(void);
|
||||
static void MX_TIM1_Init(void);
|
||||
/* USER CODE BEGIN PFP */
|
||||
static void Init_params(void);
|
||||
static void Decode_uart(uint16_t *Command, LDx_SetupTypeDef *LD1_curr_setup, LDx_SetupTypeDef *LD2_curr_setup, Work_SetupTypeDef *Curr_setup);
|
||||
@ -206,10 +216,14 @@ static void AD9102_WriteReg(uint16_t addr, uint16_t value);
|
||||
static uint16_t AD9102_ReadReg(uint16_t addr);
|
||||
static void AD9102_WriteRegTable(const uint16_t *values, uint16_t count);
|
||||
static uint16_t AD9102_Apply(uint8_t saw_type, uint8_t enable, uint8_t saw_step, uint8_t pat_base, uint16_t pat_period);
|
||||
static uint16_t AD9102_ApplySram(uint8_t enable, uint16_t samples, uint8_t hold, uint8_t triangle);
|
||||
static void AD9102_LoadSramRamp(uint16_t samples, uint8_t triangle);
|
||||
static uint16_t AD9102_ApplySram(uint8_t enable, uint16_t samples, uint8_t hold, uint8_t triangle, uint16_t amplitude);
|
||||
static void AD9102_LoadSramRamp(uint16_t samples, uint8_t triangle, uint16_t amplitude);
|
||||
static uint8_t AD9102_CheckFlags(uint16_t pat_status, uint8_t expect_run, uint8_t saw_type, uint8_t saw_step, uint8_t pat_base, uint16_t pat_period);
|
||||
static uint8_t AD9102_CheckFlagsSram(uint16_t pat_status, uint8_t expect_run, uint16_t samples, uint8_t hold);
|
||||
static void SPI2_SetMode(uint32_t polarity, uint32_t phase);
|
||||
static void AD9833_WriteWord(uint16_t word);
|
||||
static void AD9833_Apply(uint8_t enable, uint8_t triangle, uint32_t freq_word);
|
||||
static void DS1809_Pulse(uint8_t uc, uint8_t dc, uint16_t count, uint16_t pulse_ms);
|
||||
uint8_t CheckChecksum(uint16_t *pbuff);
|
||||
uint16_t CalculateChecksum(uint16_t *pbuff, uint16_t len);
|
||||
//int SD_Init(void);
|
||||
@ -273,11 +287,12 @@ int main(void)
|
||||
MX_TIM6_Init();
|
||||
MX_TIM10_Init();
|
||||
MX_UART8_Init();
|
||||
MX_TIM8_Init();
|
||||
MX_TIM11_Init();
|
||||
MX_TIM4_Init();
|
||||
/* USER CODE BEGIN 2 */
|
||||
Init_params();
|
||||
MX_TIM8_Init();
|
||||
MX_TIM11_Init();
|
||||
MX_TIM4_Init();
|
||||
MX_TIM1_Init();
|
||||
/* USER CODE BEGIN 2 */
|
||||
Init_params();
|
||||
//HAL_TIM_Base_Start(&htim11);
|
||||
//HAL_TIM_PWM_Start(&htim11, TIM_CHANNEL_1); //start modulating by Mach-Zander modulator
|
||||
|
||||
@ -293,10 +308,14 @@ int main(void)
|
||||
TIM4 -> CCR3 = (TIM4 -> ARR +1)/2 - 1;
|
||||
|
||||
|
||||
//Mach-Zander clock (should be 1/4 of ADC clock freq)
|
||||
|
||||
TIM11 -> ARR = (TIM4 -> ARR +1)*4 - 1;
|
||||
TIM11 -> CCR1 = (TIM11 -> ARR +1)/2 - 1;
|
||||
//Mach-Zander clock (should be 1/4 of ADC clock freq)
|
||||
|
||||
TIM11 -> ARR = (TIM4 -> ARR +1)*4 - 1;
|
||||
TIM11 -> CCR1 = (TIM11 -> ARR +1)/2 - 1;
|
||||
|
||||
// AD9833 MCLK output on PE9 (TIM1_CH1)
|
||||
// TIM1 clock = 184 MHz, ARR=8 -> ~20.44 MHz output
|
||||
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
|
||||
|
||||
/*
|
||||
if (HAL_GPIO_ReadPin(INP_0_GPIO_Port, INP_0_Pin) == 0){
|
||||
@ -468,7 +487,7 @@ int main(void)
|
||||
CPU_state_old = WORK_ENABLE;//Save main current cycle
|
||||
}
|
||||
break;
|
||||
case AD9102_CMD://10 - Configure AD9102 sawtooth output
|
||||
case AD9102_CMD://10 - Configure AD9102 sawtooth output
|
||||
if (CalculateChecksum(COMMAND, AD9102_CMD_WORDS - 1) == COMMAND[AD9102_CMD_WORDS - 1])
|
||||
{
|
||||
uint16_t flags = COMMAND[0];
|
||||
@ -480,9 +499,25 @@ int main(void)
|
||||
|
||||
if (sram_mode)
|
||||
{
|
||||
uint16_t samples = param0;
|
||||
uint8_t hold = (uint8_t)(param1 & 0x0Fu);
|
||||
uint16_t pat_status = AD9102_ApplySram(enable, samples, hold, triangle);
|
||||
uint8_t sram_fmt = (flags & AD9102_FLAG_SRAM_FMT) ? 1u : 0u;
|
||||
uint16_t samples;
|
||||
uint8_t hold;
|
||||
uint16_t amplitude;
|
||||
|
||||
if (sram_fmt)
|
||||
{
|
||||
amplitude = param0;
|
||||
samples = param1;
|
||||
hold = AD9102_SRAM_HOLD_DEFAULT;
|
||||
}
|
||||
else
|
||||
{
|
||||
samples = param0;
|
||||
hold = (uint8_t)(param1 & 0x0Fu);
|
||||
amplitude = AD9102_SRAM_AMP_DEFAULT;
|
||||
}
|
||||
|
||||
uint16_t pat_status = AD9102_ApplySram(enable, samples, hold, triangle, amplitude);
|
||||
State_Data[1] = (uint8_t)(pat_status & 0x00FFu);
|
||||
if (AD9102_CheckFlagsSram(pat_status, enable, samples, hold))
|
||||
{
|
||||
@ -530,9 +565,70 @@ int main(void)
|
||||
{
|
||||
State_Data[0] |= UART_DECODE_ERR;
|
||||
}
|
||||
UART_transmission_request = MESS_01;
|
||||
CPU_state = CPU_state_old;
|
||||
break;
|
||||
UART_transmission_request = MESS_01;
|
||||
CPU_state = CPU_state_old;
|
||||
break;
|
||||
case AD9833_CMD://11 - Configure AD9833 triangle output
|
||||
State_Data[1] = 0u;
|
||||
if (CalculateChecksum(COMMAND, AD9833_CMD_WORDS - 1) == COMMAND[AD9833_CMD_WORDS - 1])
|
||||
{
|
||||
uint16_t flags = COMMAND[0];
|
||||
uint16_t lsw = (uint16_t)(COMMAND[1] & 0x3FFFu);
|
||||
uint16_t msw = (uint16_t)(COMMAND[2] & 0x3FFFu);
|
||||
uint8_t enable = (flags & AD9833_FLAG_ENABLE) ? 1u : 0u;
|
||||
uint8_t triangle = (flags & AD9833_FLAG_TRIANGLE) ? 1u : 0u;
|
||||
uint32_t freq_word = ((uint32_t)msw << 14) | (uint32_t)lsw;
|
||||
|
||||
AD9833_Apply(enable, triangle, freq_word);
|
||||
}
|
||||
else
|
||||
{
|
||||
State_Data[0] |= UART_DECODE_ERR;
|
||||
}
|
||||
UART_transmission_request = MESS_01;
|
||||
CPU_state = CPU_state_old;
|
||||
break;
|
||||
case DS1809_CMD://12 - Pulse DS1809 UC/DC controls
|
||||
if (CalculateChecksum(COMMAND, DS1809_CMD_WORDS - 1) == COMMAND[DS1809_CMD_WORDS - 1])
|
||||
{
|
||||
uint16_t flags = COMMAND[0];
|
||||
uint16_t count = COMMAND[1];
|
||||
uint16_t pulse_ms = COMMAND[2];
|
||||
uint8_t uc = (flags & DS1809_FLAG_UC) ? 1u : 0u;
|
||||
uint8_t dc = (flags & DS1809_FLAG_DC) ? 1u : 0u;
|
||||
|
||||
if (uc && dc)
|
||||
{
|
||||
State_Data[0] |= UART_DECODE_ERR;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (count == 0u)
|
||||
{
|
||||
count = 1u;
|
||||
}
|
||||
if (count > 64u)
|
||||
{
|
||||
count = 64u;
|
||||
}
|
||||
if (pulse_ms == 0u)
|
||||
{
|
||||
pulse_ms = DS1809_PULSE_MS_DEFAULT;
|
||||
}
|
||||
if (pulse_ms > 500u)
|
||||
{
|
||||
pulse_ms = 500u;
|
||||
}
|
||||
DS1809_Pulse(uc, dc, count, pulse_ms);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
State_Data[0] |= UART_DECODE_ERR;
|
||||
}
|
||||
UART_transmission_request = MESS_01;
|
||||
CPU_state = CPU_state_old;
|
||||
break;
|
||||
case DECODE_TASK:
|
||||
if (CheckChecksum(COMMAND))
|
||||
{
|
||||
@ -1703,7 +1799,7 @@ static void MX_TIM10_Init(void)
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
static void MX_TIM11_Init(void)
|
||||
static void MX_TIM11_Init(void)
|
||||
{
|
||||
|
||||
/* USER CODE BEGIN TIM11_Init 0 */
|
||||
@ -1740,9 +1836,78 @@ static void MX_TIM11_Init(void)
|
||||
/* USER CODE BEGIN TIM11_Init 2 */
|
||||
|
||||
/* USER CODE END TIM11_Init 2 */
|
||||
HAL_TIM_MspPostInit(&htim11);
|
||||
|
||||
}
|
||||
HAL_TIM_MspPostInit(&htim11);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief TIM1 Initialization Function
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
static void MX_TIM1_Init(void)
|
||||
{
|
||||
|
||||
/* USER CODE BEGIN TIM1_Init 0 */
|
||||
|
||||
/* USER CODE END TIM1_Init 0 */
|
||||
|
||||
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||
TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
|
||||
|
||||
/* USER CODE BEGIN TIM1_Init 1 */
|
||||
|
||||
/* USER CODE END TIM1_Init 1 */
|
||||
htim1.Instance = TIM1;
|
||||
htim1.Init.Prescaler = 0;
|
||||
htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||
htim1.Init.Period = 8;
|
||||
htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||
htim1.Init.RepetitionCounter = 0;
|
||||
htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||
if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||
if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||
sConfigOC.Pulse = 4;
|
||||
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
|
||||
if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
|
||||
sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
|
||||
sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
|
||||
sBreakDeadTimeConfig.DeadTime = 0;
|
||||
sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
|
||||
sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
|
||||
sBreakDeadTimeConfig.BreakFilter = 0;
|
||||
sBreakDeadTimeConfig.Break2State = TIM_BREAK2_DISABLE;
|
||||
sBreakDeadTimeConfig.Break2Polarity = TIM_BREAK2POLARITY_HIGH;
|
||||
sBreakDeadTimeConfig.Break2Filter = 0;
|
||||
sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
|
||||
if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
/* USER CODE BEGIN TIM1_Init 2 */
|
||||
|
||||
/* USER CODE END TIM1_Init 2 */
|
||||
HAL_TIM_MspPostInit(&htim1);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief UART8 Initialization Function
|
||||
@ -1924,22 +2089,25 @@ static void MX_GPIO_Init(void)
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(DAC_TEC2_CS_GPIO_Port, DAC_TEC2_CS_Pin, GPIO_PIN_SET);
|
||||
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(GPIOE, ADC_MPD1_CS_Pin|ADC_ThrLD1_CS_Pin, GPIO_PIN_RESET);
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(GPIOE, ADC_MPD1_CS_Pin|ADC_ThrLD1_CS_Pin, GPIO_PIN_RESET);
|
||||
HAL_GPIO_WritePin(GPIOE, DS1809_UC_Pin|DS1809_DC_Pin, GPIO_PIN_SET);
|
||||
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(SPI4_CNV_GPIO_Port, SPI4_CNV_Pin, GPIO_PIN_SET);
|
||||
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(GPIOB, REF0_EN_Pin|TEC1_PD_Pin|OUT_6_Pin
|
||||
|OUT_7_Pin|OUT_8_Pin|OUT_9_Pin, GPIO_PIN_RESET);
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(GPIOB, REF0_EN_Pin|TEC1_PD_Pin|OUT_6_Pin
|
||||
|OUT_7_Pin|OUT_8_Pin|OUT_9_Pin, GPIO_PIN_RESET);
|
||||
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(DAC_TEC1_CS_GPIO_Port, DAC_TEC1_CS_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(AD9102_CS_GPIO_Port, AD9102_CS_Pin, GPIO_PIN_SET);
|
||||
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(DAC_TEC1_CS_GPIO_Port, DAC_TEC1_CS_Pin, GPIO_PIN_SET);
|
||||
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(GPIOD, LD1_EN_Pin|TEST_01_Pin|GPIO_PIN_7, GPIO_PIN_RESET);
|
||||
HAL_GPIO_WritePin(AD9102_TRIG_GPIO_Port, AD9102_TRIG_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(GPIOD, LD1_EN_Pin|TEST_01_Pin|GPIO_PIN_7, GPIO_PIN_RESET);
|
||||
HAL_GPIO_WritePin(AD9102_TRIG_GPIO_Port, AD9102_TRIG_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(AD9833_CS_GPIO_Port, AD9833_CS_Pin, GPIO_PIN_SET);
|
||||
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(GPIOG, GPIO_PIN_9|OUT_0_Pin|OUT_1_Pin|OUT_2_Pin
|
||||
@ -1987,12 +2155,19 @@ static void MX_GPIO_Init(void)
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pins : ADC_MPD1_CS_Pin ADC_ThrLD1_CS_Pin */
|
||||
GPIO_InitStruct.Pin = ADC_MPD1_CS_Pin|ADC_ThrLD1_CS_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
|
||||
/*Configure GPIO pins : ADC_MPD1_CS_Pin ADC_ThrLD1_CS_Pin */
|
||||
GPIO_InitStruct.Pin = ADC_MPD1_CS_Pin|ADC_ThrLD1_CS_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pins : DS1809_UC_Pin DS1809_DC_Pin */
|
||||
GPIO_InitStruct.Pin = DS1809_UC_Pin|DS1809_DC_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pin : SPI4_CNV_Pin */
|
||||
GPIO_InitStruct.Pin = SPI4_CNV_Pin;
|
||||
@ -2001,21 +2176,21 @@ static void MX_GPIO_Init(void)
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
||||
HAL_GPIO_Init(SPI4_CNV_GPIO_Port, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pins : REF0_EN_Pin TEC1_PD_Pin DAC_TEC1_CS_Pin
|
||||
OUT_6_Pin OUT_7_Pin OUT_8_Pin OUT_9_Pin */
|
||||
GPIO_InitStruct.Pin = REF0_EN_Pin|TEC1_PD_Pin|DAC_TEC1_CS_Pin
|
||||
|OUT_6_Pin|OUT_7_Pin|OUT_8_Pin|OUT_9_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pins : LD1_EN_Pin TEST_01_Pin PD7 AD9102_TRIG_Pin */
|
||||
GPIO_InitStruct.Pin = LD1_EN_Pin|TEST_01_Pin|GPIO_PIN_7|AD9102_TRIG_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
|
||||
/*Configure GPIO pins : REF0_EN_Pin TEC1_PD_Pin AD9102_CS_Pin
|
||||
OUT_6_Pin OUT_7_Pin OUT_8_Pin OUT_9_Pin */
|
||||
GPIO_InitStruct.Pin = REF0_EN_Pin|TEC1_PD_Pin|AD9102_CS_Pin
|
||||
|OUT_6_Pin|OUT_7_Pin|OUT_8_Pin|OUT_9_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pins : LD1_EN_Pin TEST_01_Pin PD7 AD9102_TRIG_Pin DAC_TEC1_CS_Pin AD9833_CS_Pin */
|
||||
GPIO_InitStruct.Pin = LD1_EN_Pin|TEST_01_Pin|GPIO_PIN_7|AD9102_TRIG_Pin|DAC_TEC1_CS_Pin|AD9833_CS_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pin : USB_FLAG_Pin */
|
||||
GPIO_InitStruct.Pin = USB_FLAG_Pin;
|
||||
@ -2448,24 +2623,114 @@ void OUT_trigger(uint8_t out_n)
|
||||
}
|
||||
}
|
||||
|
||||
static void AD9102_Init(void)
|
||||
{
|
||||
HAL_GPIO_WritePin(AD9102_CS_GPIO_Port, AD9102_CS_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(AD9102_RESET_GPIO_Port, AD9102_RESET_Pin, GPIO_PIN_RESET);
|
||||
static void AD9102_Init(void)
|
||||
{
|
||||
HAL_GPIO_WritePin(AD9102_CS_GPIO_Port, AD9102_CS_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(AD9102_RESET_GPIO_Port, AD9102_RESET_Pin, GPIO_PIN_RESET);
|
||||
for (volatile uint32_t d = 0; d < 1000; d++) {}
|
||||
HAL_GPIO_WritePin(AD9102_RESET_GPIO_Port, AD9102_RESET_Pin, GPIO_PIN_SET);
|
||||
|
||||
AD9102_WriteRegTable(ad9102_example4_regval, AD9102_REG_COUNT);
|
||||
AD9102_WriteReg(AD9102_REG_PAT_STATUS, 0x0000u);
|
||||
AD9102_WriteReg(AD9102_REG_RAMUPDATE, 0x0001u);
|
||||
HAL_GPIO_WritePin(AD9102_TRIG_GPIO_Port, AD9102_TRIG_Pin, GPIO_PIN_SET);
|
||||
}
|
||||
|
||||
HAL_GPIO_WritePin(AD9102_TRIG_GPIO_Port, AD9102_TRIG_Pin, GPIO_PIN_SET);
|
||||
}
|
||||
|
||||
static void SPI2_SetMode(uint32_t polarity, uint32_t phase)
|
||||
{
|
||||
if (LL_SPI_IsEnabled(SPI2))
|
||||
{
|
||||
LL_SPI_Disable(SPI2);
|
||||
}
|
||||
LL_SPI_SetClockPolarity(SPI2, polarity);
|
||||
LL_SPI_SetClockPhase(SPI2, phase);
|
||||
if (!LL_SPI_IsEnabled(SPI2))
|
||||
{
|
||||
LL_SPI_Enable(SPI2);
|
||||
}
|
||||
}
|
||||
|
||||
static void AD9833_WriteWord(uint16_t word)
|
||||
{
|
||||
uint32_t tmp32 = 0;
|
||||
|
||||
SPI2_SetMode(LL_SPI_POLARITY_HIGH, LL_SPI_PHASE_1EDGE);
|
||||
|
||||
HAL_GPIO_WritePin(AD9102_CS_GPIO_Port, AD9102_CS_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(DAC_LD1_CS_GPIO_Port, DAC_LD1_CS_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(DAC_TEC1_CS_GPIO_Port, DAC_TEC1_CS_Pin, GPIO_PIN_SET);
|
||||
|
||||
HAL_GPIO_WritePin(AD9833_CS_GPIO_Port, AD9833_CS_Pin, GPIO_PIN_RESET);
|
||||
|
||||
while((!LL_SPI_IsActiveFlag_TXE(SPI2)) && (tmp32++ < 1000)) {}
|
||||
LL_SPI_TransmitData16(SPI2, word);
|
||||
tmp32 = 0;
|
||||
while((!LL_SPI_IsActiveFlag_RXNE(SPI2)) && (tmp32++ < 1000)) {}
|
||||
(void) SPI2->DR;
|
||||
|
||||
HAL_GPIO_WritePin(AD9833_CS_GPIO_Port, AD9833_CS_Pin, GPIO_PIN_SET);
|
||||
}
|
||||
|
||||
static void AD9833_Apply(uint8_t enable, uint8_t triangle, uint32_t freq_word)
|
||||
{
|
||||
uint16_t control = 0x2000u; // B28 = 1
|
||||
if (triangle)
|
||||
{
|
||||
control |= 0x0002u; // MODE = 1 (triangle)
|
||||
}
|
||||
control |= 0x0100u; // RESET = 1 while updating
|
||||
|
||||
freq_word &= 0x0FFFFFFFu;
|
||||
uint16_t lsw = (uint16_t)(0x4000u | (freq_word & 0x3FFFu)); // FREQ0 LSB
|
||||
uint16_t msw = (uint16_t)(0x4000u | ((freq_word >> 14) & 0x3FFFu)); // FREQ0 MSB
|
||||
|
||||
AD9833_WriteWord(control);
|
||||
AD9833_WriteWord(lsw);
|
||||
AD9833_WriteWord(msw);
|
||||
AD9833_WriteWord(0xC000u); // PHASE0 = 0
|
||||
|
||||
if (enable)
|
||||
{
|
||||
control &= (uint16_t)(~0x0100u);
|
||||
}
|
||||
AD9833_WriteWord(control);
|
||||
}
|
||||
|
||||
static void DS1809_Pulse(uint8_t uc, uint8_t dc, uint16_t count, uint16_t pulse_ms)
|
||||
{
|
||||
for (uint16_t i = 0; i < count; i++)
|
||||
{
|
||||
if (uc)
|
||||
{
|
||||
HAL_GPIO_WritePin(DS1809_UC_GPIO_Port, DS1809_UC_Pin, GPIO_PIN_RESET);
|
||||
}
|
||||
if (dc)
|
||||
{
|
||||
HAL_GPIO_WritePin(DS1809_DC_GPIO_Port, DS1809_DC_Pin, GPIO_PIN_RESET);
|
||||
}
|
||||
HAL_Delay(pulse_ms);
|
||||
if (uc)
|
||||
{
|
||||
HAL_GPIO_WritePin(DS1809_UC_GPIO_Port, DS1809_UC_Pin, GPIO_PIN_SET);
|
||||
}
|
||||
if (dc)
|
||||
{
|
||||
HAL_GPIO_WritePin(DS1809_DC_GPIO_Port, DS1809_DC_Pin, GPIO_PIN_SET);
|
||||
}
|
||||
HAL_Delay(pulse_ms);
|
||||
}
|
||||
}
|
||||
|
||||
static void AD9102_WriteReg(uint16_t addr, uint16_t value)
|
||||
{
|
||||
uint32_t tmp32 = 0;
|
||||
uint16_t cmd = (uint16_t)(addr & 0x7FFFu); // R/W = 0 (write), 15-bit address
|
||||
|
||||
SPI2_SetMode(LL_SPI_POLARITY_LOW, LL_SPI_PHASE_1EDGE);
|
||||
|
||||
HAL_GPIO_WritePin(DAC_LD1_CS_GPIO_Port, DAC_LD1_CS_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(DAC_TEC1_CS_GPIO_Port, DAC_TEC1_CS_Pin, GPIO_PIN_SET);
|
||||
|
||||
if (!LL_SPI_IsEnabled(SPI2))
|
||||
{
|
||||
LL_SPI_Enable(SPI2);
|
||||
@ -2495,6 +2760,11 @@ static uint16_t AD9102_ReadReg(uint16_t addr)
|
||||
uint16_t cmd = (uint16_t)(0x8000u | (addr & 0x7FFFu)); // R/W = 1 (read)
|
||||
uint16_t value;
|
||||
|
||||
SPI2_SetMode(LL_SPI_POLARITY_LOW, LL_SPI_PHASE_1EDGE);
|
||||
|
||||
HAL_GPIO_WritePin(DAC_LD1_CS_GPIO_Port, DAC_LD1_CS_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(DAC_TEC1_CS_GPIO_Port, DAC_TEC1_CS_Pin, GPIO_PIN_SET);
|
||||
|
||||
if (!LL_SPI_IsEnabled(SPI2))
|
||||
{
|
||||
LL_SPI_Enable(SPI2);
|
||||
@ -2571,7 +2841,7 @@ static uint16_t AD9102_Apply(uint8_t saw_type, uint8_t enable, uint8_t saw_step,
|
||||
return AD9102_ReadReg(AD9102_REG_PAT_STATUS);
|
||||
}
|
||||
|
||||
static void AD9102_LoadSramRamp(uint16_t samples, uint8_t triangle)
|
||||
static void AD9102_LoadSramRamp(uint16_t samples, uint8_t triangle, uint16_t amplitude)
|
||||
{
|
||||
if (samples < 2u)
|
||||
{
|
||||
@ -2581,6 +2851,10 @@ static void AD9102_LoadSramRamp(uint16_t samples, uint8_t triangle)
|
||||
{
|
||||
samples = AD9102_SRAM_MAX_SAMPLES;
|
||||
}
|
||||
if (amplitude > AD9102_SRAM_AMP_DEFAULT)
|
||||
{
|
||||
amplitude = AD9102_SRAM_AMP_DEFAULT;
|
||||
}
|
||||
|
||||
// Enable SRAM access.
|
||||
AD9102_WriteReg(AD9102_REG_PAT_STATUS, 0x0004u);
|
||||
@ -2588,6 +2862,9 @@ static void AD9102_LoadSramRamp(uint16_t samples, uint8_t triangle)
|
||||
for (uint16_t i = 0; i < samples; i++)
|
||||
{
|
||||
int32_t value;
|
||||
int32_t min_val = -(int32_t)amplitude;
|
||||
int32_t max_val = (int32_t)amplitude;
|
||||
int32_t span = max_val - min_val;
|
||||
if (triangle)
|
||||
{
|
||||
uint16_t half = samples / 2u;
|
||||
@ -2598,22 +2875,40 @@ static void AD9102_LoadSramRamp(uint16_t samples, uint8_t triangle)
|
||||
if (i < half)
|
||||
{
|
||||
uint16_t denom = (half > 1u) ? (uint16_t)(half - 1u) : 1u;
|
||||
value = AD9102_SRAM_RAMP_MIN +
|
||||
((int32_t)AD9102_SRAM_RAMP_SPAN * (int32_t)i) / (int32_t)denom;
|
||||
if (span == 0)
|
||||
{
|
||||
value = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
value = min_val + (span * (int32_t)i) / (int32_t)denom;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
uint16_t tail = (uint16_t)(samples - half);
|
||||
uint16_t denom = (tail > 1u) ? (uint16_t)(tail - 1u) : 1u;
|
||||
value = AD9102_SRAM_RAMP_MAX -
|
||||
((int32_t)AD9102_SRAM_RAMP_SPAN * (int32_t)(i - half)) / (int32_t)denom;
|
||||
if (span == 0)
|
||||
{
|
||||
value = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
value = max_val - (span * (int32_t)(i - half)) / (int32_t)denom;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
uint16_t denom = (samples > 1u) ? (uint16_t)(samples - 1u) : 1u;
|
||||
value = AD9102_SRAM_RAMP_MIN +
|
||||
((int32_t)AD9102_SRAM_RAMP_SPAN * (int32_t)i) / (int32_t)denom;
|
||||
if (span == 0)
|
||||
{
|
||||
value = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
value = min_val + (span * (int32_t)i) / (int32_t)denom;
|
||||
}
|
||||
}
|
||||
|
||||
if (value < -8192)
|
||||
@ -2634,7 +2929,7 @@ static void AD9102_LoadSramRamp(uint16_t samples, uint8_t triangle)
|
||||
AD9102_WriteReg(AD9102_REG_PAT_STATUS, 0x0000u);
|
||||
}
|
||||
|
||||
static uint16_t AD9102_ApplySram(uint8_t enable, uint16_t samples, uint8_t hold, uint8_t triangle)
|
||||
static uint16_t AD9102_ApplySram(uint8_t enable, uint16_t samples, uint8_t hold, uint8_t triangle, uint16_t amplitude)
|
||||
{
|
||||
if (samples == 0u)
|
||||
{
|
||||
@ -2657,6 +2952,11 @@ static uint16_t AD9102_ApplySram(uint8_t enable, uint16_t samples, uint8_t hold,
|
||||
hold = 0x0Fu;
|
||||
}
|
||||
|
||||
if (amplitude > AD9102_SRAM_AMP_DEFAULT)
|
||||
{
|
||||
amplitude = AD9102_SRAM_AMP_DEFAULT;
|
||||
}
|
||||
|
||||
uint16_t pat_timebase = (uint16_t)(((uint16_t)(hold & 0x0Fu) << 8) |
|
||||
((AD9102_SRAM_PAT_PERIOD_BASE_DEFAULT & 0x0Fu) << 4) |
|
||||
(AD9102_SRAM_START_DELAY_BASE_DEFAULT & 0x0Fu));
|
||||
@ -2683,7 +2983,7 @@ static uint16_t AD9102_ApplySram(uint8_t enable, uint16_t samples, uint8_t hold,
|
||||
AD9102_WriteReg(AD9102_REG_STOP_ADDR, (uint16_t)((samples - 1u) << 4));
|
||||
AD9102_WriteReg(AD9102_REG_RAMUPDATE, 0x0001u);
|
||||
|
||||
AD9102_LoadSramRamp(samples, triangle);
|
||||
AD9102_LoadSramRamp(samples, triangle, amplitude);
|
||||
|
||||
if (enable)
|
||||
{
|
||||
@ -2880,20 +3180,18 @@ static uint8_t AD9102_CheckFlagsSram(uint16_t pat_status, uint8_t expect_run, ui
|
||||
return (ok ? 0u : 1u);
|
||||
}
|
||||
|
||||
void Set_LTEC(uint8_t num, uint16_t DATA)
|
||||
{
|
||||
uint32_t tmp32;
|
||||
|
||||
#if AD9102_ON_SPI2
|
||||
// AD9102 occupies SPI2; skip LD1/TEC1 writes to avoid CS conflicts.
|
||||
if (num == 1 || num == 3)
|
||||
{
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
switch (num)
|
||||
{
|
||||
void Set_LTEC(uint8_t num, uint16_t DATA)
|
||||
{
|
||||
uint32_t tmp32;
|
||||
|
||||
if (num == 1 || num == 3)
|
||||
{
|
||||
SPI2_SetMode(LL_SPI_POLARITY_HIGH, LL_SPI_PHASE_2EDGE);
|
||||
HAL_GPIO_WritePin(AD9102_CS_GPIO_Port, AD9102_CS_Pin, GPIO_PIN_SET);
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
@ -332,8 +332,8 @@ void HAL_SD_MspDeInit(SD_HandleTypeDef* hsd)
|
||||
*/
|
||||
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
|
||||
{
|
||||
if(htim_base->Instance==TIM4)
|
||||
{
|
||||
if(htim_base->Instance==TIM4)
|
||||
{
|
||||
/* USER CODE BEGIN TIM4_MspInit 0 */
|
||||
|
||||
/* USER CODE END TIM4_MspInit 0 */
|
||||
@ -341,10 +341,21 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
|
||||
__HAL_RCC_TIM4_CLK_ENABLE();
|
||||
/* USER CODE BEGIN TIM4_MspInit 1 */
|
||||
|
||||
/* USER CODE END TIM4_MspInit 1 */
|
||||
}
|
||||
else if(htim_base->Instance==TIM8)
|
||||
{
|
||||
/* USER CODE END TIM4_MspInit 1 */
|
||||
}
|
||||
else if(htim_base->Instance==TIM1)
|
||||
{
|
||||
/* USER CODE BEGIN TIM1_MspInit 0 */
|
||||
|
||||
/* USER CODE END TIM1_MspInit 0 */
|
||||
/* Peripheral clock enable */
|
||||
__HAL_RCC_TIM1_CLK_ENABLE();
|
||||
/* USER CODE BEGIN TIM1_MspInit 1 */
|
||||
|
||||
/* USER CODE END TIM1_MspInit 1 */
|
||||
}
|
||||
else if(htim_base->Instance==TIM8)
|
||||
{
|
||||
/* USER CODE BEGIN TIM8_MspInit 0 */
|
||||
|
||||
/* USER CODE END TIM8_MspInit 0 */
|
||||
@ -391,8 +402,8 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
|
||||
void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||
if(htim->Instance==TIM4)
|
||||
{
|
||||
if(htim->Instance==TIM4)
|
||||
{
|
||||
/* USER CODE BEGIN TIM4_MspPostInit 0 */
|
||||
|
||||
/* USER CODE END TIM4_MspPostInit 0 */
|
||||
@ -409,10 +420,31 @@ void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim)
|
||||
|
||||
/* USER CODE BEGIN TIM4_MspPostInit 1 */
|
||||
|
||||
/* USER CODE END TIM4_MspPostInit 1 */
|
||||
}
|
||||
else if(htim->Instance==TIM11)
|
||||
{
|
||||
/* USER CODE END TIM4_MspPostInit 1 */
|
||||
}
|
||||
else if(htim->Instance==TIM1)
|
||||
{
|
||||
/* USER CODE BEGIN TIM1_MspPostInit 0 */
|
||||
|
||||
/* USER CODE END TIM1_MspPostInit 0 */
|
||||
|
||||
__HAL_RCC_GPIOE_CLK_ENABLE();
|
||||
/**TIM1 GPIO Configuration
|
||||
PE9 ------> TIM1_CH1
|
||||
*/
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_9;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
||||
GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
|
||||
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
|
||||
|
||||
/* USER CODE BEGIN TIM1_MspPostInit 1 */
|
||||
|
||||
/* USER CODE END TIM1_MspPostInit 1 */
|
||||
}
|
||||
else if(htim->Instance==TIM11)
|
||||
{
|
||||
/* USER CODE BEGIN TIM11_MspPostInit 0 */
|
||||
|
||||
/* USER CODE END TIM11_MspPostInit 0 */
|
||||
@ -451,10 +483,21 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base)
|
||||
__HAL_RCC_TIM4_CLK_DISABLE();
|
||||
/* USER CODE BEGIN TIM4_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END TIM4_MspDeInit 1 */
|
||||
}
|
||||
else if(htim_base->Instance==TIM8)
|
||||
{
|
||||
/* USER CODE END TIM4_MspDeInit 1 */
|
||||
}
|
||||
else if(htim_base->Instance==TIM1)
|
||||
{
|
||||
/* USER CODE BEGIN TIM1_MspDeInit 0 */
|
||||
|
||||
/* USER CODE END TIM1_MspDeInit 0 */
|
||||
/* Peripheral clock disable */
|
||||
__HAL_RCC_TIM1_CLK_DISABLE();
|
||||
/* USER CODE BEGIN TIM1_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END TIM1_MspDeInit 1 */
|
||||
}
|
||||
else if(htim_base->Instance==TIM8)
|
||||
{
|
||||
/* USER CODE BEGIN TIM8_MspDeInit 0 */
|
||||
|
||||
/* USER CODE END TIM8_MspDeInit 0 */
|
||||
|
||||
@ -481,6 +481,12 @@ void UART_RxCpltCallback(void)
|
||||
case AD9102_CMD_HEADER: // AD9102 command
|
||||
UART_rec_incr = 2;//timeout flag is still setting!
|
||||
break;
|
||||
case AD9833_CMD_HEADER: // AD9833 command
|
||||
UART_rec_incr = 2;//timeout flag is still setting!
|
||||
break;
|
||||
case DS1809_CMD_HEADER: // DS1809 UC/DC pulse command
|
||||
UART_rec_incr = 2;//timeout flag is still setting!
|
||||
break;
|
||||
default: //error decoding header
|
||||
UART_rec_incr = 0;
|
||||
flg_tmt = 0;//Reset the timeout flag
|
||||
@ -503,6 +509,26 @@ void UART_RxCpltCallback(void)
|
||||
UART_rec_incr = 0;
|
||||
flg_tmt = 0;//Reset the timeout flag
|
||||
}
|
||||
else if (UART_header == AD9833_CMD_HEADER)
|
||||
{
|
||||
if ((UART_rec_incr & 0x0001) > 0)
|
||||
COMMAND[(UART_rec_incr >> 1) - 1] += ((uint16_t)(uart_buf)) << 8;
|
||||
else
|
||||
COMMAND[(UART_rec_incr >> 1) - 1] = (uint16_t)(uart_buf);
|
||||
CPU_state = AD9833_CMD;
|
||||
UART_rec_incr = 0;
|
||||
flg_tmt = 0;//Reset the timeout flag
|
||||
}
|
||||
else if (UART_header == DS1809_CMD_HEADER)
|
||||
{
|
||||
if ((UART_rec_incr & 0x0001) > 0)
|
||||
COMMAND[(UART_rec_incr >> 1) - 1] += ((uint16_t)(uart_buf)) << 8;
|
||||
else
|
||||
COMMAND[(UART_rec_incr >> 1) - 1] = (uint16_t)(uart_buf);
|
||||
CPU_state = DS1809_CMD;
|
||||
UART_rec_incr = 0;
|
||||
flg_tmt = 0;//Reset the timeout flag
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((UART_rec_incr&0x0001)>0)
|
||||
|
||||
Reference in New Issue
Block a user