Это обработчик прерывания таймера 6
Код:
void TIM6_DAC_IRQHandler(void)
{
/* USER CODE BEGIN TIM6_DAC_IRQn 0 */
/* USER CODE END TIM6_DAC_IRQn 0 */
HAL_TIM_IRQHandler(&htim6);
/* USER CODE BEGIN TIM6_DAC_IRQn 1 */
if (TapeOutMode==TAPE_OUT_STOP)
{
HAL_GPIO_WritePin(GPIOD, LD6_Pin, GPIO_PIN_RESET);
return;
}
if (TapeOutVolume==true)
{
HAL_GPIO_WritePin(GPIOD, LD6_Pin, GPIO_PIN_RESET);
TapeOutVolume=false;
}
else
{
HAL_GPIO_WritePin(GPIOD, LD6_Pin, GPIO_PIN_SET);
TapeOutVolume=true;
}
//выводим пилот-тон
if (TapeOutMode==TAPE_OUT_LEAD)
{
TIM6->PSC = 13011;//начальное значение таймера
if (tim6_countersec > 0) tim6_countersec--;
else
{
tim6_countersec = 3223;
TapeOutMode=TAPE_OUT_SYNCHRO_1;
return;
}
}
//выводим синхросигнал 1
if (TapeOutMode==TAPE_OUT_SYNCHRO_1)
{
TIM6->PSC =4050;//начальное значение таймера
TapeOutMode=TAPE_OUT_SYNCHRO_2;
return;
}
//выводим синхросигнал 2
if (TapeOutMode==TAPE_OUT_SYNCHRO_2)
{
TIM6->PSC = 4420;//начальное значение таймера
TapeOutMode=TAPE_OUT_DATA;
index16=16;
byte=0;
BytesCount=0;//обнуляем счетчик байт
return;
}
//передаём данные
if (TapeOutMode==TAPE_OUT_DATA)
{
if (index16>=16)
{
if (BytesCount>=sz)
{
TapeOutMode=TAPE_OUT_STOP;
BytesCount = 0;
return;
}
byte=FioNextByte();//читаем байт из буфера
byte_temp = byte;
index16=0;//первоначальное значение бита
BytesCount++;//общий счетчик байт файла
}
//выдаём бит
if (byte&128) {
TIM6->PSC = 10265;//начальное значение таймера
}
else {
TIM6->PSC = 5132;//начальное значение таймера
}
if ((index16%2)==1) byte<<=1;
index16++;
return;
}
}