
Originally Posted by
Frank B
?? so simply don't transmit before the first sample != 0.
Don't know how we can help without seeing your sourcecode.
Here is some source.
Code:
const int readPin_adc_0 = A15;
ADC *adc = new ADC();
const uint32_t initial_average_value = 2048;
DMAMEM static volatile uint16_t __attribute__((aligned(32))) dma_adc_buff1[buffer_size];
DMAMEM static volatile uint16_t __attribute__((aligned(32))) dma_adc_buff2[buffer_size];
AnalogBufferDMA abdma1(dma_adc_buff1, buffer_size, dma_adc_buff2, buffer_size);
uint16_t LUT[1024];
void setup() {
while (!Serial && millis() < 5000) ;
pinMode(LED_BUILTIN, OUTPUT);
std::iota(LUT, LUT + 1023, 0);
Serial.begin(115200);
while (!Serial.available()) {};
adc->adc0->setAveraging(1);
adc->adc0->setResolution(12);
abdma1.init(adc, ADC_0);
abdma1.userData(initial_average_value);
adc->adc0->setConversionSpeed(ADC_CONVERSION_SPEED::VERY_HIGH_SPEED);
adc->adc0->setSamplingSpeed(ADC_SAMPLING_SPEED::VERY_HIGH_SPEED);
adc->adc0->analogRead(readPin_adc_0);
adc->adc0->stopPDB();
adc->adc0->startPDB(100000);
adc->adc0->enableInterrupts(adc0_isr);
}
Code:
void loop() {
if ( abdma1.interrupted()) {
SendAnalogData(&abdma1, ADC_0);
}
}
Code:
void SendAnalogData(AnalogBufferDMA* pabdma, int8_t adc_num) {
volatile uint16_t* pbuffer = pabdma->bufferLastISRFilled();
if ((uint32_t)pbuffer >= 0x20200000u) arm_dcache_delete((void*)pbuffer, sizeof(dma_adc_buff1));
Serial.write((byte*) pbuffer, buffer_size_bytes);
pabdma->clearInterrupt();
}