ADC读取数据写SD卡过程问题
在使用定时器触发ADC读取数据写入SD卡过程中,每完成一次ADC进入一次ADC中断,中断中读取数据,代码如下
void ADC1_2_IRQHandler(void)
{
if (ADC_GetITStatus(ADC1, ADC_IT_EOC))
{
GPIO_WriteBit(GPIOE, GPIO_Pin_0, (i == 0) ? (i = Bit_SET) : (i = Bit_RESET));
if(number2<1400)
{
if(flag%2==0)
{
//BUF =ADC_GetConversionValue(ADC1);//ADC中断中读取数据寄存器的值
DMA_Cmd( DMA1_Channel1, ENABLE );
buf1[number2]=BUF[0]&0XFF;
buf1[number2+1]=(BUF[0]>>8)&0XFF;
DMA_Cmd( DMA1_Channel1, DISABLE );
number2=number2+2;
ADC_ClearITPendingBit(ADC1, ADC_IT_EOC);
}
if(flag%2==1)
{
//BUF =ADC_GetConversionValue(ADC1);//ADC中断中读取数据寄存器的值
DMA_Cmd( DMA1_Channel1, ENABLE );
buf1_ex[number2]=BUF[0]&0XFF;
buf1_ex[number2+1]=(BUF[0]>>8)&0XFF;
DMA_Cmd( DMA1_Channel1, DISABLE );
number2=number2+2;
ADC_ClearITPendingBit(ADC1, ADC_IT_EOC);
}
}
if(number2>1400)
{
number2=2;
printf("01\r\n");
ADC_ClearITPendingBit(ADC1, ADC_IT_EOC);
}
}
ADC_ClearITPendingBit(ADC1, ADC_IT_EOC);
}
}
每进入一次中断GPIO翻转一次,计数到1400后写卡
if(number2==1400)
{
number2=2;
flag=flag+1;
if(flag%2==1)
{
counter=counter+0X0001;
f_write(&fnew,buf1,sizeof(buf1),&fnum);
buf1[1]=counter&0xff;
buf1[0]=((counter>>8)&0XFF);
}
if(flag%2==0)
{
counter=counter+0X0001;
f_write(&fnew,buf1_ex,sizeof(buf1_ex),&fnum);
buf1_ex[1]=counter&0xff;
buf1_ex[0]=((counter>>8)&0XFF);
}
}
实际上用逻辑分析仪得到的波形如下
每隔一段时间就无法进入中断导致丢包,怀疑是由于写卡导致过度占用了CPU导致AD无法正常进行,想问一下解决方案