CH573卡在ADC中断
/*=========================================================================================================
* Function : int16_t ADC_UsbDNegative(void)
* Describe : 获取ADC_Key通道数值
* Input    : void
* Output   : void
* Return   : void
* Record   : 2021/11/29
==========================================================================================================*/
int16_t ADC_Key(void)
{
    UINT8 i = 0;
    UINT16 AdcValue=0;

    ADC_ExtSingleChSampInit(SampleFreq_3_2,ADC_PGA_0);
    ADC_ChannelCfg( 0 );

    adclen = 0;
    ADC_ClearITFlag();
    PFIC_EnableIRQ( ADC_IRQn );
    ADC_StartUp();
    while( adclen < 12 );
    PFIC_DisableIRQ( ADC_IRQn );
    for( i = 2; i < 12; i++ )
        AdcValue += abcBuff[i];

    AdcValue /= 10;

    return AdcValue;
}

__attribute__((interrupt("WCH-Interrupt-fast")))
__attribute__((section(".highcode")))
void ADC_IRQHandler( void )         //adc中断服务程序
{
  if( ADC_GetITStatus() )
  {
    ADC_ClearITFlag();
    if( adclen < 12 )
    {
      abcBuff[adclen] = ADC_ReadConverValue();
      ADC_StartUp();                // 作用清除中断标志并开启新一轮采样
    }
    adclen++;
  }
}

请问一下为什么程序每次会卡在while(adclen<12)这个地方导致程序死机,IO口做了浮空输入初始化

如果将采样改为

    for( i = 0; i < 12; i++ )
    {
        abcBuff[i] = ADC_ExcutSingleConver();  
    }

不使用中断的话是可以正常采样的

我这边测试了一下,不会卡住的,你加我微信18921422767,我帮你看下你完整的代码。


只有登录才能回复,可以选择微信账号登录