void AdcDacStartSynchro(uint32_t period, uint16_t amplitude) { if(g_adcStatus==1) AdcStop();//Потенциально здесь может все зависнуть, если цикл внутри AdcQuant не завершился //for(int i=0;i<RESULT_BUFFER_SIZE;i++) // g_resultBuffer[i]=0x00080008; g_cur_cycle = 0; LcdRepaint(); DacSetPeriod(period, amplitude); AdcRoundSize(DacSamplesPerPeriod()); AdcStartPre(); USBAdd32(DacPeriod()); USBAdd32(SystemCoreClock); USBAdd32(DacSamplesPerPeriod()); ADC_StartConversion(ADC3); ADC_StartConversion(ADC4); g_adc_elapsed_time = 0; StartTimer(); TIM_Cmd(TIM2, ENABLE); //Start DAC }
void AdcUsbStartReadBuffer() { g_adc_cur_read_pos = 0; g_adc_read_buffer = true; USBAdd32(g_ResultBufferSize); USBAdd32(g_adc_elapsed_time); USBAdd32(g_adc_cycles); }
void AdcSendLastCompute() { AdcSummaryData* data = &g_data; USBAdd16(data->count); AdcSendLastComputeCh(&data->ch_v); AdcSendLastComputeCh(&data->ch_i); USBAdd8(data->error); USBAdd32(data->nop_number); g_usb_sampled_data = false; }
void PacketReceive(volatile uint8_t* data, uint32_t size) { uint8_t command = data[0]; data++; size--; switch(command) { case 3://COMMAND_SET_FREQ OnSetFreq(*(uint32_t*)(data+0)); return; case 0://COMMAND_NONE default: USBAdd8(command); USBAdd32(size); USBSend(); break; } }